生成新行的 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 的脚本中时,第二行被跳过。这是我的 .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 文件的第一行正在创建一条附加行,该行永远不会进入模式缓冲区以供第二个缓冲区进行操作。

相关内容