ファイル内のコメントのある行はすべて#
で始まります。 #
で始まるすべての行(およびそれらの行のみ)を削除するにはどうすればよいですか? #
を含むが、行の先頭にない他の行は無視する必要があります。
誰も最も明白な解決策を提案していないことに少し驚いています。
grep -v '^#' filename
これにより、前述のように問題が解決します。
ただし、一般的な規則では、#
から行末までのすべてがコメントとして扱われることに注意してください。
sed 's/#.*$//' filename
ただし、これは、たとえば、文字列リテラル内の#
文字をコメントの開始として処理します(ケースに関連する場合も関連しない場合もあります)(そして空行を残します)。
任意の空白文字で始まり、その後に#
が続く行もコメントとして扱われる場合があります。
grep -v '^ *#' filename
空白がスペースのみの場合、または
grep -v '^[ ]#' filename
2つのスペースは、実際にはスペースとそれに続くリテラルタブ文字です(「control-v tab」と入力)。
これらのすべてのコマンドについて、filename
引数を省略して、標準入力から読み取ります(たとえば、パイプの一部として)。
レイモンドのソリューションの反対:
sed -n '/^#/!p'
「#で始まらない行を除き、何も印刷しないでください」
Awkソリューションには次を使用できます-
awk '/^#/ {sub(/#.*/,"");getline;}1' inputfile
この回答は、以前の キースによる回答 に基づいています。
egrep -v "^[[:blank:]]*#"
はコメント行を除外する必要があります。
egrep -v "^[[:blank:]]*(#|$)"
は、頻繁に役立つように、コメントと空行の両方を除外する必要があります。
[:blank:]
およびその他の文字クラスの詳細については、 https://en.wikipedia.org/wiki/Regular_expression#Character_classes を参照してください。
ファイルを直接編集できます
sed -i '/^#/ d'
空白で始まるコメント行も削除したい場合は、
sed -i '/^\s*#/ d'
通常、スクリプトの最初の行がsha-bangである場合は保持したいので、sed
は#!
で始まる行を削除しないでください。また、ハッシュのみを含み、テキストを含まない行を削除する必要があります。それをすべてまとめる:
sed -i '/^\s*\(#[^!].*\|#$\)/d'