2011-10-24 11 views
1

私は、ファイル名をとり、1つの単語を持つ行を返すbashスクリプトを書こうとしています。ここではサンプルテキストです。正確に1語の行を見つけるためのBash?

This has more than one word 
There 
is exactly one word in above line. 
     White-space 
in the start of the above line doesn't matter. 
Need-some-help. 

出力:

There 
     White-space 
Need-some-help. 

私は組み合わせSEDや正規表現を使用してに探しています。

注:他のものを使用することはできません(カスタムモジュールなしでbashスクリプトでなければなりません)。

正規表現の部分については
+0

で任意の行を削除 –

答えて

6

言葉は、その後、任意の非空白文字を含めることができる場合:

grep -E '^\s*\S+\s*$' 

または

sed -E '/^\s*\S+\s*$/!d' 

または

sed -n -E '/^\s*\S+\s*$/p' 
0
^\s*\b[a-zA-Z.-]+\s*$ 

、あなたがラインで正確に一つの単語がある場合、この正規表現にのみ一致する行毎にファイルを検索していると仮定。

+0

例を確認し、これは正しくない.. –

0

は、あなたがgrepを使用することができますと仮定すると、(最も一般的なの一つシェルスクリプトで使用されるツール):

#!/bin/bash 
grep '^ *[^ ]\+ *$' "[email protected]" 
1

まあ、sedを使用してchar + space + charを含む行を削除するだけで済みます。

#!/bin/bash 
echo "This has more than one word 
There 
is exactly one word in above line. 
     White-space 
in the start of the above line doesn't matter. 
Need-some-help." | sed '/\S \S/d' - 
1

あなたが利用可能awkはしている場合:awk 'NF==1'

のsed:?grepしないのはなぜ "非宇宙空間の非空間" シーケンスsed '/[^ ] +[^ ]/d'

関連する問題