将以下几行视为文本文件:
START This is a
sample paragraph that has special characters like new lines
spaces, tabs, quotes "abc", equals =, angular brackets <abc>, front slash / and might contain the starting string that should be ignored
START and
END
START
dfgfah
END
使用sed,我只想在第一次出现的START
和第一次出现的END
之间替换文本。
我期望的结果是:
START new_text END
START
dfgfah
END
我尝试过的是:
sed ':a;N;$!ba;s/START.*END/START New text END/' sample.txt>sample_2.txt
但是结果是:
START New text End
在第一次出现END
之前如何替换?
答案 0 :(得分:1)
使用GNU sed:
*/1 * * * * sleep 5; mycommand
^^ ^^
every minute five seconds
sed '0,/START/{:a;/END/!{N;ba};s/.*/START new_text END/;}' file
:从0,/START/
的第一次出现起START
:将新行添加到模式空间,直到找到:a;/END/!{N;ba}
END
答案 1 :(得分:0)
您可以使用os
来定义标签,并使用import os
url = os.environ['HTTP_HOST']
uri = os.environ['REQUEST_URI']
return url+uri
来分支到:
脚本中的标签。
选项b
告诉sed
自动不打印任何行。相反,您可以使用-n
命令来打印行。
在下面的示例中,sed
循环循环直到第一个p
的部分,而:head
循环循环在第一个START
之后的文本。 :tail
循环在第一个END
和:start
之间的部分循环。
START
和END
循环每行(:head
)打印(:tail
),并在到达文件末尾(p
时退出)。 n
循环不会打印,只会忽略内容。找到$q
后,将插入新文本(:start
)并打印(END
)。
s
以上技术摘自The Geek Stuff's sed
tutorial的第一个示例。