2009-07-22 15 views
2

grepを使用して、文字「d」が存在するかどうかを確認する行があります。ここで何が起こっているかの例です:grep - 引用符で囲まれたテキストを処理する

1を返し、これは正しいです:

echo d file='hello world' | grep -c -w d 

0を返し、これは正しいです:

echo file='hello world' | grep -c -w d 

1を返し、これは正しいです:

echo d file='hello world d' | grep -c -w d 

戻り値1 - 0を返す必要があります:

echo file='hello world d' | grep -c -w d 

私はそれが単一引用符内のデータを無視する必要があります。 grepはここで使うには適切なツールですか、それとも助けてくれるものがありますか?

+1

を引用してください文字列は線に広がっていますか?他の引用符文字はありますか?引用符が埋め込まれた文字列を使用できますか? –

+0

これは常に1行で、一重引用符だけです。 –

答えて

5

sedを使用して、引用符内のすべてのテキストを削除してから、をsedに出力します。

echo "d 'hi there'" | sed -r "s|'[^']*'||g" | grep -c -w d 
2

パイプ出力例sedのために、あなたはしたくないものを取り除くためのツールを通じて:

echo d file='hello world' | sed -e "s:'[^']*'::g" | grep -c -w d 

これは、読み取ります(s)を置き換えると一致するもの、このような何か正規表現(:で区切られています)を空文字列に置き換えます。

1

あなたが提供する情報をもとに、これは動作するはずです:

のgrep -c -E "^ [^ '] * D *?。?' * '。?"

 
%> cat blah.sh 

echo d file=\'hello world\' | grep -c -E "^[^']*?d.*?'.*?'" 
echo file=\'hello world\' | grep -c -E "^[^']*?d.*?'.*?'" 
echo d file=\'hello world d\' | grep -c -E "^[^']*?d.*?'.*?'" 
echo file=\'hello world d\' | grep -c -E "^[^']*?d.*?'.*?'" 

%> ./blah.sh 
1 
0 
1 
0