web-dev-qa-db-ja.com

#で始まる行を削除します

#の左右に空白が存在する可能性がある場合、#で始まる行を削除するにはどうすればよいですか?

  # Master socket provides access to userdb information. It's typically
10
chris4000

これはうまくいくようですが、私はそれについて深く考えていません:

sed -e '/^[[:space:]]*#/d'
13
Ulrich Schwarz

そのためにgrepを使用できます

grep -vh '^[[:space:]]*#' filename

私が推測するように、あなたはいくつかのファイルからコメントを取り除いているので、空の行を削除することも検討するかもしれません。これは上記を次のように展開します。

grep -vh '^[[:space:]]*\(#\|$\)' filename
10
rozcietrzewiacz

awkの解決策は、パターンのマッチングを反転することです。

$> cat ./text
elephant
# Master socket provides access to userdb information. It's typically
Zoo
 #ok
penguin
# !

$> awk '!/^(\ )*#/ {print $0}' ./text
elephant
Zoo
penguin

ДМИТРИЙМАЛИКОВによって投稿されたサンプルデータを使用して...

$ grep -vPh '^\s*#' filename.txt | grep -Po '\w+'
elephant
Zoo
penguin

私はgrepでpcreを使用することを好むので、grepに-Pスイッチを使用します(GNU grepである必要があります)。2番目のgrepは、空白のない単語を提供するための純粋な砂糖です。また、空の行を「削除」します。

0
Jim
Perl -ne 'print if ! /^\s*#/' ./text
0