新しい行を生成するSedスクリプトファイル

新しい行を生成するSedスクリプトファイル

これは簡単ですが、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番目のバッファが動作するモードバッファに入らない追加の行を生成することです。

ベストアンサー1

おすすめ記事