我正在尋找使用變量搜索文件內的字符串。使用變量與grep,以及關於這個的IF語句
我有一個腳本,將接受3或4個參數:3是必需的;第四不是強制性的。
我想在同一行內搜索匹配3個參數的文本文件,如果匹配,那麼我想刪除該行並將其替換爲我的新行 - 基本上它會更新第四個參數if設置,並避免重複的條目。
目前,這是我所:
input=$(egrep -e '$domain\s+$type\s+$item' ~/etc/security/limits.conf)
if [ "$input" == "" ]; then
echo $domain $type $item $value >>~/etc/security/limits.conf
echo \"$domain\" \"$type\" \"$item\" \"$value\" has been successfully added to your limits.conf file.
else
cat ~/etc/security/limits.conf | egrep -v "$domain|$type|$item" >~/etc/security/limits.conf1
rm -rf ~/etc/security/limits.conf
mv ~/etc/security/limits.conf1 ~/etc/security/limits.conf
echo $domain $type $item $value >>~/etc/security/limits.conf
echo \"$domain\" \"$type\" \"$item\" \"$value\" has been successfully added to your limits.conf file.
exit 0
fi
現在我已經知道input=egrep
等將無法正常工作;它工作如果我硬編碼一些值,但它不會接受這些變量。基本上我有domain=$1
,type=$2
等等。
我想它,這樣,如果所有3個變量沒有被內一個線匹配,比它只是在參數追加到文件的末尾,但如果參數不匹配,那麼我想他們被刪除,並附加到文件中。我知道我可以使用其他東西,如sed和awk,但我還沒有學習它們。
這是一個學校任務,所有的幫助都非常感謝,但我也想知道爲什麼以及它是如何工作/不這樣做的,所以如果你可以提供答案,那也是大!
我是'ksh'傢伙 - 我們會使用\'yourexpression \'來做到這一點。這是否在bash中工作,或只有$()? – Joe 2013-02-17 04:26:57
反引號和'$(..)'都適用於所有POSIX shell,包括'bash'和'ksh'。 '$(..)'雖然好得多,它更好地嵌套,並且具有更少的令人驚訝的逃生行爲。 – 2013-02-17 04:29:00
啊,感謝您的信息! – Joe 2013-02-17 04:29:55