2013-05-10 115 views
1

下面是我試圖找到含義的shell腳本。Sed命令給出了意想不到的結果

sed 's/19984 $/98400 /' | sed 's/19992 $/99200 /' 

我預計19984 $會得到與98400取代,此字符串將被傳遞到下一個sed命令其更換19992 $有99200。

但是,當我執行以下樣品輸入

echo "19984 $ need to be replaced with 98400 "| sed 's/19984 $/98400 /' | sed 's/19992 $/99200 /' 

腳本,我得到了相同的字符串

"19984 $ need to be replaced with 98400" 

我希望我丟失的東西在這裏。請幫幫我。我是shell腳本的新手。 在此先感謝!

回答

1

對於SED,$是保留字符,你必須轉義(\$),無法正確解析:

$ echo "19984 $ need to be replaced with 98400 "| sed 's/19984 \$/98400 /' 
98400 need to be replaced with 98400 

一起:

$ echo "19984 $ need to be replaced with 98400 "| sed 's/19984 \$/98400 /' | sed 's/19992 \$/99200 /' 
98400 need to be replaced with 98400 

所以,你需要保持它的樣子。

$可能意味着很多東西:
- 正常字符。
- 行尾。
- 變量的名稱。

你有代碼的方式,它是指第二種情況:行尾:

$ echo "19984 " | sed 's/19984 $/98400 /' 
98400 
$ echo "19984 something" | sed 's/19984 $/98400 /' 
19984 something 

這樣的sed將只匹配該行與19984結束的情況下。否則它不會匹配。

+0

好吧,那很好。但是我正在研究一箇舊代碼,他們保留代碼原樣。那麼他們的意思是什麼 – 2013-05-10 09:38:08

+0

剛剛更新了我的答案。你的原始代碼意味着行尾,我希望這些例子有助於理解它。 – fedorqui 2013-05-10 09:44:32

+1

這就是我正在尋找的!非常感謝Fedorqui先生 – 2013-05-10 09:52:00

相關問題