2012-03-16 4 views
6

私は三行目に検出されますgrepコマンドを必要とするunixの文字列間に1つ以上の空白を含む行を見つけるには?

1|Harry|says|hi 
2|Ron|says|bye 
3|Her mi oh ne|is|silent 
4|The|above|sentence|is|weird 

のようなラインを持っています。

これは私がやっていることです。

grep -E '" "" "+' $dname".txt" >> $dname"_error.txt" 

私は、これは、最初の空白である基づかせていたロジックは、エラーとして検出されるべき一つ以上の空白が続かなければなりません。

$ dnameは、ファイル名のパスを保持する変数です。

希望の出力を得るにはどうすればよいですか?

 3|Her mi oh ne|is|silent 

である)

答えて

4

ただ、これは行います:

grep " " ${dname}.txt >> ${dname}_error.txt 

引用符で囲まれた文字列の作業の罰金に2つのスペースを。 -Eはパターンを拡張正規表現に変換します。このため、ここではこれが不必要に複雑になります。

+0

'-E'はパターンを拡張正規表現に変換します。grepパターンは' -F'オプションが与えられていない限り常に正規表現です。 – huon

+1

したがって、名前。ええ、私はスリップしました。編集されました。 –

7
grep '[[:space:]]\{2,\}' ${dname}.txt >> ${dname}_error.txt 

2つ以上の空白をキャッチしたい場合。

+0

これは一般的な答えですので、受け入れる必要があります... –

0

あなたは2以上スペース、必要な場合:

grep -E "\s{2,}" ${dname}.txt >> ${dname}_error.txt 

をあなたのパターンが動作しない理由があるため内部の引用符です。 [スペース]には\sが使用されます。

grep -E ' +' ${dname}.txt >> ${dname}_error.txt 

しかし、あなたはそのバージョンで探しているものを正確に伝えるのは難しいです。 \s\s+でも動作しますが、\s{2,}が最も簡潔で、上限を設定するオプションもあります。 2行、3行、または4行のスペースを連続して検索する場合は、\s{2,4}

+0

ごめんなさい申し訳ありませんが、これはうまく動作しません。私は試して修正する必要があります。 – wave5459

+0

彼らは両方ともテストされており、grep(GNU grep)2.9で動作します。どのバージョンを使用していますか? –

+0

Methinks "concise"の定義を再検討する必要があるかもしれません:-) – paxdiablo

1

の4通りが使用されます。

pearl.268> sed -n 's/ /&/p' ${dname}.txt >> ${dname}_error.txt 
pearl.269> awk '$0~/ /{print $0}' ${dname}.txt >> ${dname}_error.txt 
pearl.270> grep ' ' ${dname}.txt >> ${dname}_error.txt 
pearl.271> perl -ne '//&& print' ${dname}.txt >> ${dname}_error.txt 
関連する問題