【发布时间】:2014-01-29 22:24:10
【问题描述】:
我有一个包含以下命令的文件:
doadoodle <parameters>
doadoodle <parameters>
doadoodle <parameters>
doadoodle <parameters>
wait
some more stuff
yet some more stuff
doadoodle <parameters>
doadoodle <parameters>
wait
some more stuff
yet some more stuff
我想要做的是找到“doadoodle”的最后一次出现,然后我想附加以下行:
"rc=\$?
echo \"\$rc is return code of last doadoodle \"
exit \$rc "
最终结果将如下所示:
doadoodle <parameters>
doadoodle <parameters>
doadoodle <parameters>
doadoodle <parameters>
wait
some more stuff
yet some more stuff
doadoodle <parameters>
doadoodle <parameters>
rc=$?
echo "$rc is return code of last doadoodle"
exit $rc
wait
some more stuff
yet some more stuff
我写这个好像echo要写入文件,所有不明确的字符都必须转义。
"rc=\$?
echo \"\$rc is return code of last doadoodle \"
exit \$rc "
我试过这些都是徒劳的:
sed '/doadoodle/{x;/./p;x;h;d};x;/./!{x;b};x;H;$!d;x;s/doadoodle[^\n]*\n/& "my append stuff here.Note its got newlines inside it"\n/' file
我在awk 中尝试过类似的操作,但它会在每个“doadoodle”之后打印出来。在最后一个之后我想要它。
任何线索如何做到这一点?
这是我在awk 中尝试过的:
tac file | awk '{print} /^dooadoodle/&& !n {print "msg" ; n++}'
尽管有tac,它仍然会在字符串第一次出现之后追加。
有人可以只使用 shell 脚本和 POSIX 工具吗? Perl 在 shell 脚本中间听起来有点笨拙。
泰山
更新宝马的问题。文件格式如下:
Nohup Noodldo commands > filename 2>&1&
Nohup Noodldo commands > filename 2>&1&
Nohup Noodldo commands > filename 2>&1&
wait
Nohup Noodldo commands > filename 2>&1&
Nohup Noodldo commands > filename 2>&1&
我将不处理这些,所以它必须找到“Nohup”的最后一个实例并粘贴之前的代码,
rc=$?
echo "$rc is return code of last doadoodle"
exit $rc
,在里面。 第二个 SED 解决方案 也确实有效 - 与 AWK 一起。 TY,伙计们
【问题讨论】:
-
stackoverflow.com/questions/7724778/… 的可能重复项 - 查找 sed -i 以插入给定示例
标签: linux shell sed awk append