繁体   English   中英

为什么sed正则表达式替代无效?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM