regex - Shell 脚本 Sed - 如何仅在第一次出现字符串时读取文件并写入另一个文件?

标签 regex linux bash shell sed

我试图读取文件 test.txt 的内容并写入另一个文件 Report.html,仅在字符串的第一个匹配项中。像这样的东西:

sed -i '/, past/r test.txt' Report.html

上面的命令读取所有字符串“, past”,并在所有字符串“, past”中包含 test.txt 的内容。但我只想在第一次出现的字符串“, past”中包含它。像这样的命令:

sed -i '0,/, past/r test.txt' Report.html

上面的命令不起作用,正确的语法是什么?

最佳答案

由于 sed r 命令不占用范围,并且 sed 控件不允许“仅第一个”,我认为您需要“计算”感兴趣的行号并将其提供给 sed :

sed -i $(awk '/, past/{print NR;exit}' Report.html)'r test.txt' Report.html

仅当您保证 , past 出现在 Report.html 的某处时才这样做。如果不是,将 $(awk...) 结果存储在一个变量中并首先检查它。否则,sed 将对每一 行进行包含。

关于regex - Shell 脚本 Sed - 如何仅在第一次出现字符串时读取文件并写入另一个文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34025547/

相关文章:

c# - 正则表达式匹配除给定列表之外的所有单词

Java正则表达式替换文本中的字符串

regex - vim 中分隔符之间的数字递增

linux - waitpid() 是做什么的?

python - 尝试下载html页面来创建一个非常简单的网络爬虫

c - Linux 内核模块编程 - 无法使用 CONFIG_CC_STACKPROTECTOR_REGULAR : -fstack-protector not supported by compiler

c++ - 如何在 gedit 中使用外部工具交互式运行 C++ 程序

linux - 从 shell 脚本中的变量运行命令

bash - bash 脚本中的换行符

linux - 奇怪的 "sh"行为