将文件内容复制到目标文件。在目标文件中模式的最后匹配之后。来自原始字段的内容显示在目标文件的下一行

时间:2015-05-23 08:26:19

标签: linux printing awk sed cat

我有两个文件,

file.1
 $ cat file.1 
this is the stuff that needs to be copied.
and file.2
$ cat file.2
aaaa
aaaa
aaaa
aaaa

bbbb
bbbb
bbbb
bbbb

cccc
cccc
cccc
cccc

dddd
dddd
dddd
dddd

我希望在bbbb的最后一次匹配之后的内容复制到file.2。

所以这将是:

cat file.1 >> file.2

但是只附加到文件的末尾,所以也许

cat file.1 >> file.2 | grep bbbb

但这并不像我想的那样有效。

结果应该是:

$ cat file.2
aaaa
aaaa
aaaa
aaaa

bbbb
bbbb
bbbb
bbbb

这是需要复制的东西。

cccc
cccc
cccc
cccc

dddd
dddd
dddd
dddd

1 个答案:

答案 0 :(得分:0)

您有一些未定义的案例。如果您有以下文件,会发生什么?

aaaa
aaaa
bbbb
bbbb
cccc
cccc
bbbb
bbbb

您想在最后 bbbb之后只阅读一次吗?或者您希望在每次从bbbb转换为非{I}之后立即阅读它bbbb(在这种情况下," cccc"或EOF)?如果您只想要最后 bbbb,那么您可以为ed创建编辑shell脚本:

#!/bin/sh
ed "$1" <<EOF
1
?bbbb?r file.2
w
q
EOF

然后使其可执行

chmod ugo+x my_script.sh

然后你可以在你想要的文件上调用它:

find . -type f -name '*.txt' -exec ./my_script.sh {} \;

请注意,文件规范(*.txt)应捕获sh / ed脚本,也不应捕获模板({{1 }})。

如果您希望了解file.2 - 非 - bbbb转换,即使它在文件中多次发生,您也需要澄清这一点。