使用sed删除范围内的特定行

时间:2016-03-24 17:23:09

标签: bash sed

我知道与此相关的其他一些问题,例如:Sed Unknown Option to s;但是我没有这个问题。我想跑:

sed -n '/Ce./,/EOF/ {s!^#!! d} p' more_tests_high.job

但我一直在接受:

sed: -e expression #1, char 21: unknown option to `s'

我正在尝试在more_test_high.jobCe之间搜索EOF的文字,但请删除以#开头的所有评论行。是的,EOF是我要搜索的文件中的文字文本。我尝试使用/!_作为分隔符。我可以跑:

sed -n '/Ce./,/EOF/ p' more_tests_high.job 

并查看CeEOF之间的所有文字,但如何删除以#开头的注释行?

3 个答案:

答案 0 :(得分:2)

您的命令应如下所示:

sed -n '/CE./,/EOF/{/^#/d;p}' more_tests_high.job

对于CEEOF行之间的所有行,检查它们是否为注释行,如果是,则删除它,重新启动循环并忽略{{1 }}

如果它不是评论行,则会打印出来。

BSD sed(也可在Mac OS X上找到)需要在p和右大括号之间加一个分号。

答案 1 :(得分:0)

awk救援!

 awk '/Ce./,/EOF/{if($0!~/^#/) print}' file

几乎没有直接翻译要求而没有神秘的语法。

答案 2 :(得分:0)

这可能适合你(GNU sed):

sed '/CE./,/EOF/!d;/^#/d' file

您只对CE.EOF之间的行范围感兴趣,因此删除了其他内容。进入所需范围后,删除任何以#开头的行。打印所有剩余行。