使用 GNU sed (macOS) 4.4 将一个捕获组替换为另一个捕获组
Replace one capture group with another with GNU sed (macOS) 4.4
我查看了其他一些外围问题,但未能找到解决我的问题的方法,所以如果这与我遗漏的问题重复,我深表歉意。
基本上,我有以下 GNU sed 命令:
sed -E -imr 's/^(\w)+/(\w)+$/g' file
应该用该行的最后一个单词替换一行的第一个单词。
第一个正则表达式 ^(\w)+
效果很好,匹配每行的第一个单词。问题是该命令将第一个单词替换为文字字符串 (w)+$
我尝试转义反斜杠、圆括号、运算符,但我没有成功地让正则表达式在命令的输出部分工作。
能否使用正则表达式捕获组来替换不同的正则表达式捕获组?需要转义什么,或者需要使用什么替代语法?
注意
我在 macOS 上使用来自 brew 安装的 coreutils 的 GNU sed,所以这个问题的答案可能不适用于其他版本的 sed,比如 macOS 上的本机 BSD。
替换不包含正则表达式,它包含一个可以引用正则表达式中定义的捕获组的字符串。要用最后一个单词替换第一个单词,您需要捕获最后一个单词和该行的其余部分:
sed -r 's/^\w+(.*\b)(\w+)$//'
| | |
Matches | |
the 1st | Matches the last word
word |
Matches everything in the middle
up to a "word boundary"
请注意,-r
、\w
和 \b
可能不适用于所有 sed
版本,但它们应该适用于最新的 GNU sed。
我查看了其他一些外围问题,但未能找到解决我的问题的方法,所以如果这与我遗漏的问题重复,我深表歉意。
基本上,我有以下 GNU sed 命令:
sed -E -imr 's/^(\w)+/(\w)+$/g' file
应该用该行的最后一个单词替换一行的第一个单词。
第一个正则表达式 ^(\w)+
效果很好,匹配每行的第一个单词。问题是该命令将第一个单词替换为文字字符串 (w)+$
我尝试转义反斜杠、圆括号、运算符,但我没有成功地让正则表达式在命令的输出部分工作。
能否使用正则表达式捕获组来替换不同的正则表达式捕获组?需要转义什么,或者需要使用什么替代语法?
注意
我在 macOS 上使用来自 brew 安装的 coreutils 的 GNU sed,所以这个问题的答案可能不适用于其他版本的 sed,比如 macOS 上的本机 BSD。
替换不包含正则表达式,它包含一个可以引用正则表达式中定义的捕获组的字符串。要用最后一个单词替换第一个单词,您需要捕获最后一个单词和该行的其余部分:
sed -r 's/^\w+(.*\b)(\w+)$//'
| | |
Matches | |
the 1st | Matches the last word
word |
Matches everything in the middle
up to a "word boundary"
请注意,-r
、\w
和 \b
可能不适用于所有 sed
版本,但它们应该适用于最新的 GNU sed。