【问题标题】:copy file content to target file. After last match of pattern in target file. Content from original filed displays on next line of target file将文件内容复制到目标文件。在目标文件中模式的最后一次匹配之后。原始文件的内容显示在目标文件的下一行
【发布时间】:2015-05-23 08:26:19
【问题描述】:

我有两个文件,

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

【问题讨论】:

  • 标题应显示:“将文件内容复制到目标文件。在目标文件中模式的最后一次匹配之后。原始文件的内容显示在目标文件的下一行”
  • 显示该示例输入的所需输出。
  • 你是不是已经解决了。或者你还在等待答案。

标签: linux printing awk sed cat


【解决方案1】:

您有一些未定义的案例。如果您有以下文件,应该怎么办?

aaaa
aaaa
bbbb
bbbb
cccc
cccc
bbbb
bbbb

您是想在 最后一个 bbbb 之后只读一次,还是想在每次从bbbb 转换到非bbbb 后读一次(在这种情况下,是“cccc”还是 EOF)?如果您只想要last 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-to-non-bbbb 转换,即使它在文件中多次发生,您也需要澄清这一点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-12
    • 1970-01-01
    • 1970-01-01
    • 2019-06-09
    相关资源
    最近更新 更多