更新字符串我有一個包含像查找 - 使用shell腳本
https://abcdefgh.com/123/pqrst/456/xyz.html
行所以我想搜索這條線在該文件中,並與mno.html
xyz.html
文件 - 替換
將在shell腳本中將mno.html
作爲輸入。
如何做到這一點?
更新字符串我有一個包含像查找 - 使用shell腳本
https://abcdefgh.com/123/pqrst/456/xyz.html
行所以我想搜索這條線在該文件中,並與mno.html
xyz.html
文件 - 替換
將在shell腳本中將mno.html
作爲輸入。
如何做到這一點?
您可以使用此sed
,
sed '/https:\/\/abcdefgh.com\/123\/pqrst\/456\/xyz.html/s#\(.*\/\)\(.*\)#\1mno.html#g' yourfile
使用awk
如果行是完全一樣的例子,我的意思是如果沒有其他字符之前或之後
awk '{print gensub(/^(https:\/\/abcdefgh.com\/123\/pqrst\/456\/)xyz.html$/,"\\1mno.html","g")}' input.txt
否則:
awk '{print gensub(/(https:\/\/abcdefgh.com\/123\/pqrst\/456\/)xyz.html/,"\\1mno.html","g")}' input.txt
你應該提到這是GNU awk特有的。您應該在'.com'和'.html'中跳過'.'。同樣值得告訴OP,他們需要避開可能出現在文件名中的其他可能的RE元字符等(例如'*')。說實話,雖然我只是使用sed,如果我要使用RE替換方法,並且不得不逃脫一堆字符。 –
$ awk 'BEGIN{FS=OFS="/"} index($0,"https://abcdefgh.com/123/pqrst/456/xyz.html"){$NF="mno.html"} 1' file
https://abcdefgh.com/123/pqrst/456/mno.html
或者如果這兩個值已經存儲在shell變量中:
$ old="https://abcdefgh.com/123/pqrst/456/xyz.html"
$ new="mno.html"
$ awk -v old="$old" -v new="$new" 'BEGIN{FS=OFS="/"} index($0,old){$NF=new} 1' file
https://abcdefgh.com/123/pqrst/456/mno.html
您應該在'.com'和'.html'中跳過'.'。同樣值得告訴OP,他們需要避開可能出現在文件名中的其他可能的RE元字符等(例如'*')。 –