我的问题是在 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
任何人都知道如何解决这个问题?
答案 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”