[英]Delete specific lines in range with sed
我知道與此有關的其他幾個問題,例如: s的Sed未知選項 ; 但是我沒有那個問題。 我正在嘗試運行:
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
之間的所有文本,但是如何刪除以#
開頭的注釋行?
您的命令應如下所示:
sed -n '/CE./,/EOF/{/^#/d;p}' more_tests_high.job
對於CE
和EOF
行之間的所有行,請檢查它們是否為注釋行,如果是,則將其刪除,這將重新啟動循環並忽略p
。
如果不是注釋行,則將其打印出來。
BSD sed(在Mac OS X上也可以找到)在p
和右括號之間需要一個額外的分號。
awk
解救!
awk '/Ce./,/EOF/{if($0!~/^#/) print}' file
幾乎可以直接翻譯需求,而無需使用隱秘的語法。
這可能對您有用(GNU sed):
sed '/CE./,/EOF/!d;/^#/d' file
您僅對CE.
之間的線路范圍感興趣CE.
和EOF
因此刪除其他任何內容。 進入所需范圍后,刪除以#
開頭的所有行。 打印所有剩余的行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.