我有两个文件,
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.1 的内容复制到 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
最佳答案
您有一些未定义的情况。如果您有以下文件会发生什么?
aaaa
aaaa
bbbb
bbbb
cccc
cccc
bbbb
bbbb
您是否只想在最后 bbbb
之后读入一次,还是希望在每次从 bbbb
转换到非 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
脚本,也不应捕获模板 (file.2
)。
如果您想捕获 bbbb
到非bbbb
转换,即使它在文件中发生多次,您也需要澄清这一点。
关于linux - 将文件内容复制到目标文件。在目标文件中最后一次匹配模式之后。原始文件的内容显示在目标文件的下一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30410566/