TEXT
myfile.txt
テキストが見つかった最後の場所に複数行の文字列を追加する必要があります# My Search
。
一般的なパターン交換の場合は大丈夫ですsed
。i
しかし、.で一致より2行上に移動する方法がわかりませんsed
。
はいmyfile.txt
:
text1
text2
#
# My Search
#
text4
text5
#
# My Search
#
text6
TEXT
良い:
TEXT="
[my search]
home=/var/home
string=random
"
myfile.txt
終わりを見てください:
text1
text2
#
# My Search
#
text4
text5
[my search]
home=/var/home
string=random
#
# My Search
#
text6
ベストアンサー1
grep -n
行番号を抽出し、それをsedアドレスに使用してテキストを挿入するには、テキストを正しく引用する必要があります。つまり、各改行の前にはバックスラッシュが必要です。
line=$(grep -n '# My Search' myfile.txt | tail -n1 | cut -f1 -d:)
((--line))
text=${TEXT//$'\n'/$'\\\n'}
text=${text%$'\\\n'}$'\n'
sed "$line i \\
$text" myfile.txt