regex - 如果一行有 2 个相同的单词,则使用 sed 将第二个单词更改为 'jinx'

标签 regex linux unix sed

例如:我唯一的目标是在比赛中进球

My only goal is to score a jinx in the match

两个单词之间应该有一个或多个单词。

最佳答案

$ echo "My only goal is to score a goal in the match" | \
  sed -r 's/(\b\w+\b)(.*\w+.*)\1/\1\2jinx/g'
My only goal is to score a jinx in the match
  • -r 激活扩展 posix regular expressions 。注意:使用基本的 posix 正则表达式,您必须转义括号,例如: \(....\) 并且 + 运算符不存在
  • (\b\w+\b) 匹配单词
  • (.*\w+.*) 捕获其间的所有内容

  • \1 匹配第一个括号,\2 匹配第二个括号

  • g 代表全局,没有这个它只会改变第一个匹配

因此,(\b\w+\b)(.*\w+.*)\1/会发现同一单词的行出现了两次

然后 \1\2jinx 会将第二次出现的 \1 替换为 jinx

关于regex - 如果一行有 2 个相同的单词,则使用 sed 将第二个单词更改为 'jinx',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53532553/

相关文章:

Php Regex - 如何选择是否等于某物

linux - 具有可选参数的 .NET mono MVC3 路由约束

linux - 关于内核版本、设备树和 buildroot 的混淆

使用 open() 或 creat() 创建的文件设置的权限比我要求的要少

linux - 在/var 目录中查找 catalina.out 文件的 unix 命令是什么?

C 使用系统调用逐字节写入文件

java - 密码验证,一次一个正则表达式模式

java - 在 Java 中使用正则表达式在第一个逗号之后和两个大写字母和一个逗号之前提取字符串

python - 正则表达式和一系列模式?

linux - 我运行 git 时实际需要的 git 'make' 中的文件是什么?