この質問は以前に要求されたことがあることを知っていますが、これは少し異なります。エスケープされたコメント#
または開始コメントを意味しないコメント(単一または二重頂点の間)を除くすべてのコメントを削除する必要があります。
次のテキストで始めてください。
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:この解決策は一行に引用符のペアがあると仮定します。