我已经查看了其他一些外围问题,并且无法找到解决问题的方法,所以如果这与我错过的内容重复,我很抱歉。
基本上,我有以下GNU sed命令:
sed -E -imr 's/^(\w)+/(\w)+$/g' file
应该用行的最后一个单词替换行的第一个单词。
第一个正则表达式^(\w)+
效果很好,匹配每行的第一个单词。问题是该命令用文字字符串(w)+$
我试图逃避反斜杠,括号,操作符,但我没有运气使正则表达式在命令的输出部分工作。
可以使用正则表达式捕获组来替换不同的正则表达式捕获组吗?需要转义什么,或者需要使用哪种替代语法?
我在brew安装的coreutils上的macOS上使用GNU sed,因此这个问题的答案可能不适用于其他版本的sed,就像macOS上的本机BSD一样。
答案 0 :(得分:5)
替换不包含正则表达式,它包含一个字符串,可以引用正则表达式中定义的捕获组。要将最后一个单词替换为最后一个单词,您需要捕获最后一个单词以及该行的其余部分:
sed -r 's/^\w+(.*\b)(\w+)$/\2\1/'
| | |
Matches | |
the 1st | Matches the last word
word |
Matches everything in the middle
up to a "word boundary"
请注意,-r
,\w
和\b
可能不适用于所有sed
版本,但它们应该适用于最近的GNU sed。