GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie kann ich in einer Linux-Shell jede Zeile einer mehrzeiligen Zeichenfolge verarbeiten?

Übergeben Sie einfach Ihren String an Ihre Funktion:

function my_function
{
    while test $# -gt 0
    do
        echo "do something with $1"
        shift
    done
}
my_string="cat
dog
bird"
my_function $my_string

gibt Ihnen:

do something with cat
do something with dog
do something with bird

Und wenn es Ihnen wirklich wichtig ist, dass andere Leerzeichen als Argumenttrennzeichen verwendet werden, setzen Sie zuerst Ihren IFS :

IFS="
"
my_string="cat and kittens
dog
bird"
my_function $my_string

zu bekommen:

do something with cat and kittens
do something with dog
do something with bird

Vergessen Sie nicht unset IFS danach.


Verwenden Sie dies (es ist eine Schleife zum Lesen jeder Zeile aus der Datei file )

cat file | while read -r a; do echo $a; done

wo die echo $a ist, was Sie mit der aktuellen Zeile machen möchten.

UPDATE:von Kommentatoren (danke!)

Wenn Sie keine Datei mit mehreren Zeilen, aber eine Variable mit mehreren Zeilen haben, verwenden Sie

echo "$variable" | while read -r a; do echo $a; done

UPDATE2:"read -r " wird empfohlen, Backslashes zu deaktivieren (\ ) Zeicheninterpretation (überprüfen Sie mtraceur-Kommentare; wird in den meisten Shells unterstützt). Es ist in POSIX 1003.1-2008 http://pubs.opengroup.org/onlinepubs/9699919799/utilities/read.html

dokumentiert

Standardmäßig, sofern die Option -r nicht angegeben ist, <backslash> soll als Fluchtzeichen fungieren. .. Folgende Option wird unterstützt:-r - Behandeln Sie keine <backslash> Charakter in irgendeiner besonderen Weise. Betrachten Sie jeden als Teil der Eingabezeile.


Linux
  1. So echoen Sie eine neue Zeile in Bash-Shell-Skripten

  2. So verwenden Sie Befehlszeilen-Shell-Funktionen in Linux

  3. Wie konvertiere ich Hex in ASCII-Zeichen in der Linux-Shell?

  4. Wie konvertiere ich die Shell-Ausgabe von Linux in HTML?

  5. Wie kann ich unter Linux feststellen, welcher Prozess meinem Prozess ein Signal gesendet hat?

So beenden Sie einen Prozess in Linux

So ändern Sie die Shell unter Linux

Wie füge ich in Bash nach jeder Zeile in einer Datei eine Zeichenfolge hinzu?

Wie kann ich dem Anfang jeder Zeile in einer Datei eine Zeichenfolge voranstellen?

Wie kann ich alle Prozessstarts in Linux protokollieren?

Kann der Init-Prozess ein Shell-Skript in Linux sein?