替换某些字符串

替换某些字符串

我有一个包含以下内容的文本文件:

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.

  • 在我们的例子中,oldis.*(/s-show)匹配任意数量的任意字符,.*,后跟/s-showwhere/s-show被保存为组 1。

  • 在我们的例子中,newhttps://www.testpage.com\1\1组 1 替换。

相关内容