sed在文件中替换,直到模式匹配为止

sed在文件中替换,直到模式匹配为止,sed,Sed,我使用sed对文件中的头进行简单替换。 有时需要更换,有时不需要。 它工作正常,但很长,因为它每次读取文件(数百MB)。 但是,有一种模式将标题与内容分开 遇到特定模式后,如何告诉sed停止处理文件 例如: blabla标题,我想在这里编辑,但可能不会在这里框架更多的内容 假设您想从标题中删除“want”,但单词可能在所述标题中,也可能不在所述标题中。我知道我想在第帧停止处理文件 sed-i'0,/\(pattern1\| pattern2\)/s//pattern1/'*#TODO在帧停止您可

我使用
sed
对文件中的头进行简单替换。 有时需要更换,有时不需要。 它工作正常,但很长,因为它每次读取文件(数百MB)。 但是,有一种模式将标题与内容分开

遇到特定模式后,如何告诉sed停止处理文件

例如:

blabla标题,我想在这里编辑,但可能不会在这里框架更多的内容

假设您想从标题中删除“want”,但单词可能在所述标题中,也可能不在所述标题中。我知道我想在第帧停止处理文件


sed-i'0,/\(pattern1\| pattern2\)/s//pattern1/'*#TODO在帧停止

您可以使用awk

awk '/pattern stop/ {f=1} !f {sub(/old data/,"new data")} 1' file
这将用“新数据”替换
旧数据
,只要未找到
模式停止

要将数据写回原始文件,请执行以下操作:

awk 'code'  file > tmp && mv tmp file

您可以使用
q
命令退出sed处理其余输入

sed -i '0,/\(pattern1\|pattern2\)/s//pattern1/' * ; /FRAME/q'
  • /FRAME/
    模式匹配包含
    FRAME
    的行,在该行上执行命令
    q

您可以指定一个地址范围,从文件开始到遇到
FRAME
as

sed '0, /FRAME/ s/old/new' 

第二种选择是否假定文件以空格开头?@nha No是地址范围。指定必须从行
0
执行操作,直到获得模式
FRAME