2016-03-24 3 views
1

私はこのようないくつかの他の質問について知っています:Sed Unknown Option to s;しかし、私はその問題を抱えていません。私が実行しようとしています:sedを使用して範囲内の特定の行を削除してください

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

を私は入れません:

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

私はCeEOF間のテキストのmore_test_high.jobを検索しますが、#で始まるコメント行を削除しようとしています。はい、EOFは、検索したいファイルのリテラルテキストです。私は、デリミタとして/,!、および_を使用しようとしました。

sed -n '/Ce./,/EOF/ p' more_tests_high.job 
をして CeEOFの間ですが、どのように私は #で始まるコメント行を削除するには、すべてのテキストを参照してください。私は実行することができますか?

+2

'd'の前に' !! 'の後ろにセミコロンが必要です。そしてあなたはあなたがしていることを考える必要があります。行を編集し、変更したものを印刷せずに削除します。 –

+0

@JonathanLeffler「!!」の後にセミコロンを追加しました。 pを '}'の中に入れましたが、今は出力がありません。 – Chemist612

+0

'{/ ^#/ d}'がほしいと思います。行を削除するために 's'は必要ありません。 –

答えて

2

あなたのコマンドは次のようになります。再起動され、彼らはコメント行であれば、あなたがチェックし、そうならば、あなたはそれを削除し、CEEOFラインとの間のすべての行については

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

サイクルを無視し、pを無視します。

コメント行でない場合は、それが印刷されます。

BSD sed(Mac OS Xにもあります)では、pと閉じ中括弧の間にセミコロンを追加する必要があります。

0

awkレスキュー!

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

わかりやすい構文のないほとんどの要件の翻訳。

0

これはあなたのために働くかもしれない(GNUのSED):

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

あなたがCE.EOF間の線の範囲にのみ関心があるので、何か他のものは削除します。必要な範囲に入ったら、#で始まる行を削除します。残りの行をすべて印刷します。

関連する問題