sedを使用してテキストファイルのコメント行を削除する

sedを使用してテキストファイルのコメント行を削除する

私は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間に空白行があります。data3sample.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がsedUbuntuや他の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

関連情報