エスケープされたハッシュ文字を含むファイルからすべてのコメントを削除する方法

エスケープされたハッシュ文字を含むファイルからすべてのコメントを削除する方法

この質問は以前に要求されたことがあることを知っていますが、これは少し異なります。エスケープされたコメント#または開始コメントを意味しないコメント(単一または二重頂点の間)を除くすべてのコメントを削除する必要があります。

次のテキストで始めてください。

test
# comment
comment on midline # comment
escaped hash "\# this is an escaped hash"
escaped hash "\\# this is not a comment"
not a comment "# this is not a comment - double apices"
not a comment '# this is not a comment - single apices'
this is a comment \\# this is a comment
this is not a comment \# this is not a comment

欲しい

test
comment on midline
escaped hash "\# this is an escaped hash"
escaped hash "\\# this is not a comment"
not a comment "# this is not a comment - double apices"
not a comment '# this is not a comment - single apices'
this is a comment \\
this is not a comment \# this is not a comment

頑張った

grep -o '^[^#]*' file

ただし、これによりエスケープされたハッシュも削除されます。

注:私が扱っているテキストは実際にエスケープ#\#)されていますが、二重エスケープ#\\#)が不足しているので、保存するかどうかは重要ではありません。ハッシュがエスケープされないという事実のため、削除する方がよりきれいになると思います。

ベストアンサー1

a(ゼロ以上の空白が前にある)sedで始まる行を削除し、その後に単一のバックスラッシュがない(引用符1の間にない場合にのみ)、それで始まるすべての文字列を削除できます。##

sed '/^[[:blank:]]*#/d
/["'\''].*#.*["'\'']/!{
s/\\\\#.*/\\\\/
s/\([^\]\)#.*/\1/
}' infile

1:この解決策は一行に引用符のペアがあると仮定します。

おすすめ記事