我使用sed
对文件中的标题进行简单替换。
有时他们需要更换,有时不需要。
它工作正常,但很长,因为它每次都读取文件(数百MB)。
但是,有一种模式可以将标题与内容分开。
如何在遇到某种模式后告诉sed
停止处理文件?
示例:
我想在这里编辑的blabla标题,但可能不是FRAME更多内容
假设想要从标题中删除“want”,但该单词可能在或可能不在所述标题中。我知道我想停止在FRAME处理文件。
sed -i '0,/\(pattern1\|pattern2\)/s//pattern1/' * ; # TODO stop at FRAME
答案 0 :(得分:1)
您可以使用awk
awk '/pattern stop/ {f=1} !f {sub(/old data/,"new data")} 1' file
只要找不到old data
,这会将pattern stop
替换为“新数据”。
将数据写回原始文件:
awk 'code' file > tmp && mv tmp file
答案 1 :(得分:1)
您可以使用q
命令退出处理其余输入的sed
sed -i '0,/\(pattern1\|pattern2\)/s//pattern1/' * ; /FRAME/q'
/FRAME/
模式匹配包含FRAME
的行q
已被执行的行或强>
您可以指定从文件开头到遇到FRAME
sed '0, /FRAME/ s/old/new'