2009-07-22 65 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

不要引述字符串有跨越線?還有其他引用字符嗎?有沒有嵌入引號的字符串? – 2009-07-22 15:43:57

回答

5

我會使用sed刪除引號內的所有文本,然後在sed的輸出上執行grep。事情是這樣的:

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