sed命令将每个包含子字符串的单词出现加倍,但不会使单词本身加倍

时间:2017-10-21 23:46:17

标签: regex bash unix sed

我的问题是在 sed 的帮助下,每次出现包含子字符串'two'的单词时加倍,但不要将单词'two'加倍加倍

到目前为止我尝试过:

cat filename | sed 's/ \ (two\) /\1\1/g'

但我的问题是它本身就在重复。

例如:

two times twothird threetwothree 

执行上述sed操作后,我得到的是:

twotwo times twotwothird threetwotwothree

但我打算在这里得到的是:

two times twothird twothird threetwothree threetwothree

任何人都知道如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

使用此:

sed -E 's/([[:alpha:]]*two[[:alpha:]]+|[[:alpha:]]+two[[:alpha:]]*)/\1 \1/g' file
  • [[:alpha:]]*two[[:alpha:]]+匹配开头或中间有two的所有字词,但不匹配two本身
  • 的所有字词
  • [[:alpha:]]+two[[:alpha:]]*匹配中间或末尾有两个但不是two本身的所有单词
  • ()表达式提取替换表达式中使用的匹配单词\1 \1

示例:

s="two times twothird two threetwothree onetwo twothree two"
sed -E 's/([[:alpha:]]*two[[:alpha:]]+|[[:alpha:]]+two[[:alpha:]]*)/\1 \1/g' <<< "$s"

产量

two times twothird twothird two threetwothree threetwothree onetwo onetwo twothree twothree two

答案 1 :(得分:1)

sed -r 's/(\S*two\S+|\S+two\S*)/\1 \1/g

检查至少一个前缀或后缀为“two”