我有一个包含以下内容的文本文件:
yyyy-mm-dd, 12:34/s-show/...
yyyy-mm-dd, 13:24/s-show/...
yyyy-mm-dd, 14:32/s-show/...
yyyy-mm-dd/s-show
现在我想用另一个字符串替换每行的 /s-show/... 之前的子字符串,如下所示:
https://www.testpage.com/s-show/...
https://www.testpage.com/s-show/...
https://www.testpage.com/s-show/...
这怎么可能做到呢?
答案1
尝试:
$ sed -E 's@.*(/s-show)@https://www.testpage.com\1@' File
https://www.testpage.com/s-show/...
https://www.testpage.com/s-show/...
https://www.testpage.com/s-show/...
https://www.testpage.com/s-show
要就地更改文件:
sed -Ei 's@.*(/s-show)@https://www.testpage.com\1@' File # GNU (Linux)
或者:
sed -Ei '' 's@.*(/s-show)@https://www.testpage.com\1@' File # BSD (MacOS)
怎么运行的:
-E
告诉 sed 使用扩展正则表达式。这消除了对某些转义字符的需要。s@old@new@
是一个替代命令,用于查找正则表达式old
并将其替换为new
.在我们的例子中,
old
is.*(/s-show)
匹配任意数量的任意字符,.*
,后跟/s-show
where/s-show
被保存为组 1。在我们的例子中,
new
是https://www.testpage.com\1
被\1
组 1 替换。