[英]Why is sed regex substitution not working?
我需要使用sed
做一些非常简单的事情:我需要HEAD detached at 19d7ea9
字符串中获取提交哈希。
这是我使用sed
尝试
echo "HEAD detached at 19d7ea9" | sed 's/HEAD\ detached\ at\ \(.\+\)/\1/'
但是,该命令不起作用,我无法弄清楚原因。 我知道我可以像sed 's/HEAD\\ detached\\ at//
一样做不同的事情,并且得到相同的结果。 但是我似乎无法弄清楚为什么第一种方法不起作用。
任何答案将不胜感激。 这是我第一次使用sed
(我知道我参加聚会迟到了),所以请忽略noobie错误。
编辑:感谢所有的答案。 似乎使用-E
标志是解决此问题的最直接方法。
我尝试通过另一个示例来遵循@ooga的答案,但这也不幸失败了。 同样,在这里我无法弄清楚我在做什么错:
例2:我试图查看回购是在远程的前面还是后面,以及提交的次数。 这是我的代码
status="On branch master Your branch is ahead of 'origin/master' by 1 commit. (use "git push" to publish your local commits) Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git checkout -- <file>..." to..."
echo $status | sed -E 's/Your branch is (ahead|behind).+([0-9]+) comm)/\2 \1/'
感谢您提供有关此主题的任何其他帮助。 我不知道为什么我不能正确完成整个sed
业务。
使用带有-E
标志(在OSX上或GNU的-r
标志)的“扩展”(现代)正则表达式语法。 这样,您不仅具有+
量词,而且无需在其前面或括号中使用反斜杠。
sed -E 's/HEAD detached at (.+)/\1/'
您得到了有关sed版本的答案,但是FWIW在awk中只是告诉它在行上打印最后一个以空格分隔的字段:
awk '{print $NF}' file
在POSIX Basic正则表达式中 , +
似乎不是有效的量词,而*
则是*
,因此以下内容可以工作,甚至可以移植到OSX。
echo "HEAD detached at 19d7ea9" | sed 's/HEAD detached at \(.*\)/\1/'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.