我收到了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
我错过了什么?
答案 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