2011-04-20 230 views
0

我嘗試寫一個shell腳本,但我有一些困難做一個特殊的if語句。我希望如果它在文件中找到一個值,它就會執行某些操作。如果shell腳本文件

我的文件是這樣的:

1,2,2,8
0,0,3,3
5,0,4,5
1,4,5,3
1,0, 8,7

我此提取一些信息

sed -i '/^[0-9][0-9]*, [0-9][0-9]*, 3,/d' file.txt

但我想把這個在如果條件下,如果像該第三數目是3或4或5 I做的sed else我做別的事我試試這個:

if [ '/*, *, [3,5],/d' ]; then 
    echo 'ok' 
else 
    echo'fail' 
fi 

但它不起作用,它總是打印好。

你知道我該怎麼做嗎?

+0

你應該你的腳本嗎? – 2011-04-20 09:45:30

+0

只是從文件中提取一些信息,這部分工作正常。 我只是想改善我的腳本,當我想要的數字不在裏面做別的。 – tranen 2011-04-20 09:50:29

+0

if [[grep -s'3,'$ filename];然後'等等?當文件包含一個空的3和一個逗號時,該行將返回OK。但目前還不清楚你試圖在這裏做什麼......是否在一個變量的文件名,你有讀取文件到一個數組?什麼是確切的條件等? – 2011-04-20 09:52:09

回答

1

' *'將匹配未確定數目的空格。 您應該改爲[0-9]*

3

請提供清晰的例子下一次

#!/bin/bash 
# tested with bash 4 
while read -r x x Y x 
do 
    case "$Y" in 
    "3,") echo "ok";; 
    *) echo "Not ok";; 
    esac 
done < file 
+0

+1。我從來不知道'-r'選項可以讀取。 – 2011-04-20 10:05:38

+0

但它只適用於一個號碼?如果我想3-4-5,怎麼樣? – tranen 2011-04-20 10:08:36

+0

@tranen,那麼你最好展示一些你想要的更清晰的例子。指定輸入文件的所有可能格式。沒有足夠的信息,您不會期望得到準確的答案。 – 2011-04-20 10:20:12

0

您可以使用內部場分離器,並讓殼照顧有關解析:

#!/bin/sh 
# let's create the input file 
echo '5, 2, 3, 5' > /tmp/myfile 

# function will output third argument 
third() { IFS=', '; echo $3; } 

# now let's print the third value from the input file 
third $(cat /tmp/myfile) 

見人SH,並尋找IFS瞭解更多信息。

+0

謝謝你的回答,但它沒有做if循環 – tranen 2011-04-21 01:37:54

0

如果不強制使用唯一的外殼的解決方案,你可以得到由AWK第三場:

#!/bin/sh 
THIRD=$(awk -F', ' '{print $3}' < /tmp/myfile)