2016-10-14 9 views
1

私は、一行にsedコマンドを使って空白でないコメント行だけを#から始めるようにしています。私は、これは何も出力しない、しかしこの空白でないコメント行をSEDで保持する

sed /^#\S+/'!'d file

をしようとしています。

は、ファイルがこの

# comment 
# another comment 
# 
#  
# 
line1 
line2 
# extra comment 

のようになりますそして、私は

# comment 
# another comment 
# extra comment` 

私のコマンドがまったく出力を提供していませんしたいと言います。私は可能な限りシンプルな方法でこれをやろうとしています。何か案が? sed

+1

[編集ヘルプ](http://stackoverflow.com/editing-help)をご覧ください。 – Cyrus

答えて

2

sed -n '/^[[:blank:]]*#[[:blank:]]*[^[:blank:]]/p' 
  • [:blank:]

  • ^[[:blank:]]*が、その後、

  • #リテラル#一致した開始時にゼロ個以上の空白に一致するスペースとタブを含む文字クラス[[:blank:]]*はゼロまたは複数のブランク

  • [^[:blank:]]は、スペースまたはタブ以外

注意を任意の文字に一致する、ではない任意の非空白文字に特別なシーケンス\Sのすべてsedの支援拡大。

例:

​​
+0

これは機能しました。私はdeleteコマンドを持ったアプローチを使用しようとし続けましたが、マッチングと印刷が簡単だと思います。非常によく説明されています。ありがとうございました。 – ricknaght

1

は必見のSEDていますか? そうでない場合は、たとえばgrep '^\s*#.*[^\s]'を試すことができます。0以上の空白文字の後ろにコメント記号を含む行を印刷します。空白文字以外の文字も少なくとも1つ含みます。

2
$ grep '#.*[^[:blank:]]' file 
# comment 
# another comment 
# extra comment 

$ sed -n '/#.*[^[:blank:]]/p' file 
# comment 
# another comment 
# extra comment 

$ awk '/#.*[^[:blank:]]/' file 
# comment 
# another comment 
# extra comment 
関連する問題