私はsed
初心者です。sed
テキストファイルのコメント行を削除するために使用したいと思います。
私のテキストファイルシリーズでは、コメント行はスタートと#
記号または@
記号(つまり、元のファイルに描画するために使用されましたxmgrace
)。次のようなサンプルファイル(というsample.txt
)があるとしましょう。
# Comment 1 # Another comment # Yet another comment @ More comments @ Still more comments data1 data2 data3
sed
以下を得るために内部修正を使用したいと思います。sample.txt
data1 data2 data3
どちらのバージョンも「」と「」のdata2
間に空白行があります。data3
sample.txt
からインスピレーションを受けるこのスタックオーバーフローの質問、私は次の一連の(連続的な)命令を思い出しました。
sed -i 's/#.*$//' sample.txt
sed -i 's/@.*$//' sample.txt
次の結果ファイルが取得されます。
<blank line> <blank line> <blank line> <blank line> <blank line> data1 data2 data3
<blank line>
空行だけがあります。 (Stack Exchangeが出力形式を正しく指定するようにこれを作成する必要がありました。)
上記の問題は、コメント行が空白行に変わり、完全に削除されないことです。
(連続)コマンドの別の可能性は次のとおりです。
sed -i 's/#.*$//' sample.txt
sed -i 's/@.*$//' sample.txt
sed -i '/^$/d' sample.txt
私はそれから次のような結果を得ます。
data1 data2 data3
data2
しかし、上記の内容も、""と""の間の空白行がdata3
維持されないため、間違っています。 (誤って空行を無差別にすべて削除しました。) コメント行を削除する方法は?
私はUbuntu Linuxを使用しています。時間をいただきありがとうございます!
答え1
使用sed 削除コマンド(これは、GNUがsed
Ubuntuや他のGNUシステムにあると仮定しています。)
sed -i '/^[@#]/ d' sample.txt
先行する空白文字を考慮する必要がある場合:
sed -i '/^\s*[@#]/ d' sample.txt
答え2
grep '^[^@#]' < file.in > file.out
すべての文字で始まる行を提供しますが、空行だけでなく行も@
効果的に#
削除します#foo
。@foo
grep -v '^[@#]' < file.in > file.out
空行は維持されます。以前に空白がある行を考慮するには、次のようにします@
。#
grep -v '^[[:blank:]]*[@#]' < file.in > file.out
空白行を削除します。
grep '^[[:blank:]]*[^[:blank:]@#]' < file.in > file.out