簡體   English   中英

用sed刪除范圍內的特定行

[英]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中搜索CeEOF之間的文本,但是刪除所有以#開頭的注釋行。 是的, EOF是我要搜索的文件中的文字文本。 我嘗試使用/ ! _作為分隔符。 我可以跑:

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

並看到CeEOF之間的所有文本,但是如何刪除以#開頭的注釋行?

您的命令應如下所示:

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

對於CEEOF行之間的所有行,請檢查它們是否為注釋行,如果是,則將其刪除,這將重新啟動循環並忽略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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM