我知道与此相关的其他一些问题,例如: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.job
和Ce
之间搜索EOF
的文字,但请删除以#
开头的所有评论行。是的,EOF
是我要搜索的文件中的文字文本。我尝试使用/
,!
和_
作为分隔符。我可以跑:
sed -n '/Ce./,/EOF/ p' more_tests_high.job
并查看Ce
和EOF
之间的所有文字,但如何删除以#
开头的注释行?
答案 0 :(得分:2)
您的命令应如下所示:
sed -n '/CE./,/EOF/{/^#/d;p}' more_tests_high.job
对于CE
和EOF
行之间的所有行,检查它们是否为注释行,如果是,则删除它,重新启动循环并忽略{{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
之间的行范围感兴趣,因此删除了其他内容。进入所需范围后,删除任何以#
开头的行。打印所有剩余行。