Jest to z pewnością przypadek, w którym chcesz używać coś takiego sed
(lub awk
lub perl
) zamiast odczytywać po jednej linii w pętli powłoki. To nie jest rzecz, którą powłoka wykonuje dobrze lub sprawnie.
Przydaje się możliwość pisania funkcji wielokrotnego użytku. Oto prosta, choć nie będzie działać na całkowicie dowolny tekst (ukośniki lub foremnych metaznakami ekspresyjne będą mylić rzeczy):
function insertAfter # file line newText
{
local file="$1" line="$2" newText="$3"
sed -i -e "/^$line$/a"$'\\\n'"$newText"$'\n' "$file"
}
Przykład:
$ cat foo.txt
Now is the time for all good men to come to the aid of their party.
The quick brown fox jumps over a lazy dog.
$ insertAfter foo.txt \
"Now is the time for all good men to come to the aid of their party." \
"The previous line is missing 'bjkquvxz.'"
$ cat foo.txt
Now is the time for all good men to come to the aid of their party.
The previous line is missing 'bjkquvxz.'
The quick brown fox jumps over a lazy dog.
$
że nie będzie działać; potrzebujesz "backslash" i "newline" w ciągu polecenia sed po "a", a nie spacji. –