2014-10-01 37 views
0

嗨,大家好,我需要使用Linux腳本的幫助。使用變量替換每次發生的模式

這是一個示例輸入:

Login=Testtt/123 Password=Testtt/123 Login=eJwQwq12 Password=OjeEor/Kd

首先,我用grep然後AWK使用下面的代碼

passStr=grep 'Passsword' test.param | awk -F= '{print $2}'

所以那裏我得到了Testtt123然後把它搜索的模式使用passStr進入變量。

然後我把字符串替換成使用

passNew=ThisIsATest=

現在我需要更換的字符串稱爲Testtt123第二次出現是在passStr和使用變量passNew

它更換成 ThisIsATest=另一個變量

我只有這個代碼,但它取代了所有出現的字符串。

sed /$passStr/{s/$passStr/$passNew/} test.param

這裏的問題是,第二次出現位於不同的線路。 還有其他的密碼發生,使我很難使用awk,因爲passStr將有兩個可能的值。我只需要第一個密碼。

接下來是有次在該密碼的值包含斜槓(改變樣品輸入)

輸出應該像

Login=Testtt123 Password=ThisIsATest= Login=eJwQwq12 Password=OjeEor/Kd

任何幫助,我能得到什麼?

+1

顯示輸入樣本。 – John1024 2014-10-01 03:07:12

+0

您已經告訴了我們很多關於您如何解決您的問題的建議,但還不足以說明您的問題實際上是我們真正幫助您的。發佈一些示例輸入和預期輸出,包括您認爲難以處理的情況,例如在不希望它們匹配的行上搜索字符串,搜索其他字符串的一部分的字符串等。 – 2014-10-01 13:23:43

回答

1
sed "$!N;$s/${passStr}/${passNew}/2" test.param 

sed的是線由默認的行,你需要首先將內容加載到工作緩衝區,並在最後一行的測試加載

0

你有「第二occurrance」過於複雜。只需搜索「密碼」並替換「=」後面的內容即可。

sed '/Password/ s/=.*/='"$passNew"/' file