![如何使用 shell 脚本更改文本字符串](https://linux22.com/image/128412/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20shell%20%E8%84%9A%E6%9C%AC%E6%9B%B4%E6%94%B9%E6%96%87%E6%9C%AC%E5%AD%97%E7%AC%A6%E4%B8%B2.png)
/home/temp.txt
http://url_new_address.com
/home/列表.txt
URL http://url_address.com:URL1
URL http://url_address.com:URL2
URL http://url_address.com:URL3
如何使用 shell 脚本将 temp.txt 中的行替换为 list.txt 中的 URL2?
命令后
/home/列表.txt
URL http://url_address.com:URL1
URL http://url_new_address.com:URL2
URL http://url_address.com:URL3
答案1
感谢 don_crissti 的建议和 Stéphane Chazelas解决方案我想出了以下几点:
#!/bin/sh
lhs=':URL2'
rhs="URL $(cat temp.txt):URL2"
escaped_lhs=$(printf '%s\n' "$lhs" | sed 's:[][\/.^$*]:\\&:g')
escaped_rhs=$(printf '%s\n' "$rhs" | sed 's:[\/&]:\\&:g;$!s/$/\\/')
sed "s/.*$escaped_lhs/$escaped_rhs/" list.txt
这将找到任何包含结尾的行:URL2
并将其替换为:
URL http://url_new_address.com:URL2