我有一个文件,其中包含 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/