regex - sed 尝试在搜索和替换中使用捕获组时前面的正则表达式无效

标签 regex sed

我有一个文件,其中包含 s3binsync 的输出,格式如下

Sync: s3://my-bin-url/source/000/000/001.jpg -> s3://my-bin-url/400/x/000/000/001.jpg
Sync: s3://my-bin-url/source/000/000/002.jpg -> s3://my-bin-url/400/x/000/000/002.jpg
Sync: s3://my-bin-url/source/000/000/003.jpg -> s3://my-bin-url/400/x/000/000/003.jpg

我希望最终得到一个包含以下内容的文件

000/000/001.jpg
000/000/002.jpg
000/000/003.jpg

我正在尝试使用以下命令使用 sed 来执行此操作。它包含在 #!/bin/sh 脚本中,而 $2 对应于绝对文件路径。该文件始终存在。

sed --in-place --regexp-extended '/.*((?:[0-9]{3}\/){2}[0-9]{3}\.jpg)/\1/gi' $2

当我执行脚本时,我收到以下错误消息

sed: -e expression #1, char 36: Invalid preceding regular expression

到目前为止,查找此问题的尝试尚未产生任何有用的响应,只有建议围绕确保 / 被转义(确实如此)和转义 {} (这似乎仅在不使用 --regexp-extend

时适用

最佳答案

您的 sed 命令可能在开头缺少 s 命令。

您还可以在 reg 中使用备用正则表达式分隔符并避免转义 /

这个 sed 应该可以工作:

sed -i -r 's#.*(([0-9]{3}/){2}[0-9]{3}\.jpg)#\1#i' file

关于regex - sed 尝试在搜索和替换中使用捕获组时前面的正则表达式无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18106969/

相关文章:

java - "Invalid escape sequence (valid ones are\b\t\n\f\r\"\'\\)"语法错误

Python re.split() 与 nltk word_tokenize 和 sent_tokenize

css - Javascript - 正则表达式匹配多行样式标签中的通用选择器(*)

regex - 使用命令 sed 用正则表达式替换变量错误

linux - 如何加速在非常大的单单元 BAM 文件上使用 Regex 的 sed

python - Re.match 在 python 中总是返回 None

javascript - 给定一个字符串形式的 URL,如何只提取域和扩展名?

regex - 如何保留与 sed 匹配的第一个实例

regex - 提取 bash 脚本中文件的两个表达式之间的行(使用 regexp、sed)

regex - 在 sed 替换中用 RegEx 替换模式