sed error sed:-e expression#1,char 23:`s'命令的RHS上的引用\ 1无效

时间:2016-12-16 10:35:08

标签: regex sed

我收到了sed:

的错误
sed: -e expression #1, char 23: invalid reference \1 on `s' command's RHS

这是我的剧本:

result=`$(PERL) parse.pl report.log`;   \
echo $$result | sed "s/.*([a-zA-Z0-9._]*).*/\1/p";

基本上,我的perl脚本的输出是这样的:

ERR: dir/out/file/report/temp.log (23): some error message here

我期望sed做的是获取dir / out / file / report / temp.log的路径。

但是我坚持这个错误: sed:-e表达式#1,字符23:在`s'命令的RHS上无效的引用\ 1

我错过了什么?

1 个答案:

答案 0 :(得分:2)

这是因为,sed默认将(视为字符模式。你需要,

  • 逃避副手,

    echo $$result | sed "s/.*\([a-zA-Z0-9._]*\).*/\1/p";
    
  • 用户使用-E

    扩展正则表达式
    echo $$result | sed -E "s/.*([a-zA-Z0-9._]*).*/\1/p";
    

您拥有的正则表达式不足以从字符串中获取目录名称。相反,你可以写

$ sed -E 's/ERR: ([^ ]*).*/\1/g'

示例

$ echo "ERR: dir/out/file/report/temp.log (23): some error message here" | sed -E 's/ERR: ([^ ]*).*/\1/g'
dir/out/file/report/temp.log