
これは簡単ですが、sed -fがどのように機能するかは明らかにわかりません。
txtファイルbar.txtで始まります。
set_expand [get_it -marker \*spam*]
私は出力が次のようになります:
{Line1:# EXPAND ####\n############\n#{print set_expand [get_it -marker \*spam*]\n###
Line2:set_expand [foo\*spam*]"}
私が言ったように、連続した機能を実行するのは「ただ」なので、これは簡単になると思いました。
sed -e 's/\(^set_expand[^\n]*$\)/{Line1:# EXPAND ####\\n############\\n#{print \1\\n###\nLine2:\1"}/g' bar.txt >tmp.txt
sed -e '/^[{]/\!{s/get_it -marker[[:blank:]]*\(.*\)$/foo\1/g}' tmp.txt
希望の出力を生成します。
{Line1:# EXPAND ####\n############\n#{print set_expand [get_it -marker *spam*]\n###
Line2:set_expand [foo*spam*]"}
ただし、sed -fを使用してスクリプトに入れると、2行目はスキップされます。これは私の.sedファイルです。 create_awk.sed
s/\(^set_expand[^\n]*$\)/{Line1:# EXPAND ####\\n############\\n#{print \1\\n###\nLine2:\1"}/g
/^[{]/!{s/get_it -marker[[:blank:]]*\(.*\)$/foo\1/g}
ライン2の出力が欠落して置き換えられました。
sed -f create_awk.sed bar.txt
{Line1:# EXPAND ####\n############\n#{print set_expand [get_it -marker *spam*]\n###
Line2:set_expand [get_it -marker *spam*]"}
問題は、.sedファイルの最初の行が2番目のバッファが動作するモードバッファに入らない追加の行を生成することです。