2014-06-20 36 views
1

我有這樣grep命令反引號內的美元符號

文件名的文件:hello.txt的

{1:ABC}{2:BCD}{3:{108:20140619-2}}{4: 
:97A::Hi//12345 
:97A::Hi//12345 
:93B::Hello//FAMT/00000, 
:16S:FIN 
-}{5:{CHK:BDG6789}}{S:{ABC:}{DEF:S}{WOM:ONHGRT}} 

現在基本上我檢查$符號的存在,以及: 97A:與即時通訊使用下面的if語句。

if [ `grep -c '\$' hello.txt` -gt 0 ] && [ `grep -c ":97A:" hello.txt` -gt 1 ] 
then 
echo "condition satisfied" 
else 
echo "condition not satisfied" 
fi 

如果我執行這個即時通訊條件獲得滿意的回聲語句。但是,ID應該是倒過來:(因爲即時通訊推杆和條件請幫助這個

+1

這是什麼應該做的(以英文,而不是代碼)? – durron597

+0

基本上我會得到消息有$符號,所以我檢查它的存在,因爲它不存在,它應該給回聲條件不滿意儀式。? – user2647888

+0

'grep -c'\ $'hello.txt'和'grep -c「的輸出是什麼:97A:」hello.txt「?這是你所期望的嗎? –

回答

1

更換grep -c '\$' hello.txt通過grep -c '\\$' hello.txt然後根據需要將工作

例如:。

bash -x test.sh 
++ grep -c '\$' hello.txt 
+ '[' 0 -gt 0 ']' 
+ echo 'condition not satisfied' 
condition not satisfied 

PS :bash -x是你的朋友:)

+0

嗨蒂亞戈請檢查我的意見 – user2647888

+0

更改我的答案。 – Tiago

1

我建議在子shell中使用$語法執行grep命令,然後進行比較。在我看來,這是更乾淨的方式,並且要求你不要成爲一個逃生藝術家。

if [ $(grep -c '\$' hello.txt) -gt 0 ] && [ $(grep -c ":97A:" hello.txt) -gt 1 ] 
then 
echo "condition satisfied" 
else 
echo "condition not satisfied" 
fi 

爲了您hello.txt輸出將是:

>> bash test.bash 
condition not satisfied 

由於在文件中沒有美元符號

[ $(grep -c '\$' hello.txt) -gt 0 ] 

將測試

[ 0 -gt 0 ] 

和產生錯誤的,而

[ $(grep -c ':97A' hello.txt) -gt 1 ] 

將測試

[ 2 -gt 1 ] 

,併產生真實的。最後,假& & true將產生false,第二個echo語句將被執行。

1

我也不明白你在問什麼,但是從你的代碼我得出結論,你有麻煩的美元符號。我猜你需要轉義反斜線,以及如果你使用反引號:

$ echo 'foo$bar' > dollar.txt 
$ echo 'foo_bar' > no_dollar.txt 

$ [ `grep -c '\$' dollar.txt` -gt 0 ] && echo 1 
1 

$ [ `grep -c '\$' no_dollar.txt` -gt 0 ] && echo 1 
1 

$ [ `grep -c '\\$' dollar.txt` -gt 0 ] && echo 1 
1 

$ [ `grep -c '\\$' no_dollar.txt` -gt 0 ] && echo 1 

$ [ `grep -c '\\$' no_dollar.txt` -gt 0 ] || echo 0 
0 

另外,使用$()而不是反引號

+0

您必須在反引號命令替換內部加上反斜槓,因爲在那裏有一個額外的反斜槓級別,以允許反斜槓反引號充當嵌套的反引號。 '$()'不需要這個,因爲它自然是可嵌套的。 –

1

「我檢查$符號的存在」

由於輸入中的任何位置沒有「$」符號,第一個條件將不匹配,因此第一個grep的輸出爲0.由於0不大於0,結果爲「false」。因此,第二個條款根本不會被執行。 「條件不滿意」,因爲您對「滿意」的要求是:輸入包含「$」和「:97A:」。

對於grep是否匹配任何行,您不需要計數匹配數。

if grep -q '\$' file; then ... 

是一種方法,使用grep的結果,在條件語句中沒有鄉巴佬,goldbergismns

1

使用awk和讀取文件只有一次:

if awk '/[$]/{d++} /:97A:/{o++} END{exit !(d && o>1)}' hello.txt; then 
    echo "condition satisfied" 
else 
    echo "condition not satisfied" 
fi