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

标签 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.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/

相关文章:

cocoa - 在不使用面板的 NSPrintOperation 上设置打印机特定选项

macos - mac 命令行中 RS 的 awk 问题

linux - 如果程序没有运行,通过检查他的 pid 重新启动它

linux - 使用 tc 模拟特定端口上的网络延迟

linux - 如何了解和调试Linux中线程的执行顺序

linux - 行尾(新行)在 bash 中转义

r - 在 R 中的同一行打印字符串和变量内容

javascript - Angular js - 有条件地打印 View 数据

python - 从行中搜索数字并放在特定句子中

sed - awk/sed 断线如何修复和移动某些行