我已经查看了一些其他外围问题并且无法找到问题的解决方案,所以如果这与我错过的内容重复,我很抱歉.
基本上,我有以下GNU sed命令:
sed -E -imr 's/^(\w)+/(\w)+$/g' file
Run Code Online (Sandbox Code Playgroud)
应该用行的最后一个单词替换行的第一个单词.
第一个正则表达式^(\w)+非常有效,并匹配每一行的第一个单词.问题是该命令用文字字符串替换了第一个单词(w)+$
我试图逃避反斜杠,括号,运算符,但我没有运气使正则表达式在命令的输出部分工作.
可以使用正则表达式捕获组来替换不同的正则表达式捕获组吗?需要转义什么,或者需要使用哪种替代语法?
我在brew安装的coreutils上使用了macOS上的GNU sed,所以这个问题的答案可能不适用于其他版本的sed,就像macOS上的本地BSD一样.
替换不包含正则表达式,它包含一个字符串,可以引用正则表达式中定义的捕获组.要用最后一个单词替换第一个单词,您需要捕获最后一个单词以及该行的其余部分:
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"
Run Code Online (Sandbox Code Playgroud)
需要注意的是-r,\w和\b所有可能无法正常工作sed的版本,但他们应该在sed最近GNU工作.
| 归档时间: |
|
| 查看次数: |
657 次 |
| 最近记录: |