用$ selectors查找和替换文件中的字符串?

时间:2016-11-10 16:40:15

标签: regex unix replace terminal

我有一个文件,我希望使用()来选择一段文字,并$1$2分别替换一个字符串。

http://127.0.0.1:5080/tarballs/(.+)/(.+).tgz

https://registry.npmjs.org/$1/-/$1-$2.tgz

我怎样才能在unix中执行此操作?我想运行这样的命令:

$ regex-replace ./file.txt "http://127.0.0.1:5080/tarballs/(.+)/(.+).tgz" "https://registry.npmjs.org/$1/-/$1-$2.tgz"

1 个答案:

答案 0 :(得分:1)

您可以使用sed

s='http://127.0.0.1:5080/tarballs/user/file.tgz'

sed -E 's~http://127\.0\.0\.1:5080/tarballs/(.+)/(.+.tgz)$~https://registry.npmjs.org/\1/-/\1-\2~' <<< "$s"

https://registry.npmjs.org/user/-/user-file.tgz
  • DOT是正则表达式中的特殊元字符,因此需要进行转义,否则它将匹配任何字符。
  • ~s的{​​{1}}(替换)命令中使用了正则表达式分隔符。
  • sed用于扩展正则表达式支持。
  • -E\1是2个捕获组的反向引用。