文字列の特定の行の後に複数行のテキストファイルの内容を追加したいと思います。たとえば、ファイルの場合ファイル.txt含む
line 1
line 2
こんなことをしたいprintf "s1random stuff\ns2 more random stuff\ns1 final random stuff\n" | sed "/(^s2.+)/a $(<file.txt)"
出力を取得します。
s1 random stuff
s2 more random stuff
line 1
line 2
s1 final random stuff
引用符とエスケープ文字のさまざまな組み合わせを試しましたが、何も機能しないようです。私の特定のユースケースでは、文字列がbash変数になるので、物事を簡単にする難解なものがある場合は知っておくことをお勧めします。
私が今やっていることは、ファイルに文字列を書き、grepを使って追加する行を見つけて、head、printf、およびtailの組み合わせを使用してファイルを一緒に圧縮することです。これを行うためにファイルにテキストを書き込む必要はないようです。
答え1
あらかじめファイルを読む必要はありません。 sedはすでにr
コマンドファイルを読むことができます:
$ printf -v var "%s\n" "s1random stuff" "s2 more random stuff" "s1 final random stuff"
$ echo "$var"
s1random stuff
s2 more random stuff
s1 final random stuff
$ sed '/^s2/r file.txt' <<< "$var"
s1random stuff
s2 more random stuff
line 1
line 2
s1 final random stuff
答え2
変数の改行文字を\newline
。そして、挿入するテキストを前に追加する必要があります\newline
。
var=$(<file.txt)
# Put backslash before newlines in $var
var=${var//
/\\
}
printf "s1random stuff\ns2 more random stuff\ns1 final random stuff\n" | sed "/^s2/a \
$var"
答え3
このようなことをしたいですか? :
LINE1=`cat test.file | sed '1!d'`
LINE2=`cat test.file | sed '2!d'`
LINE3=`cat test.file | sed '3!d'`
LINE4=`cat test.file | sed '4!d'`
echo $LINE1
echo $LINE2