我想改变所有事件,如" waaa"," wwwaaaaa"," wa"通过修剪所有" a"最后。
waaa> w ^
wwa> WW
waaaaa>瓦特
我知道如何使用正则表达式在文本中找到这些字符串:
grep -nE "wa+" file.txt
我也知道如何在bash脚本中更改一个字符串
#!/bin/bash
s1="wwwwaaaaaaaa"
s2=${s1%w*}
echo "$s1 --> $s2"
(来自https://stackoverflow.com/a/27658717/5219155的修改过的脚本)
但我想使用像
这样的东西sed -E 's/wa+/ZZZ/' file.txt
这里我需要ZZZ。
sed -E 's/wa+/${$1%w*}/' file.txt
不起作用。
示例输入:
Lorem ipsum wa waaaaaaa saaa dolor sit amet, consectetur aw awwwwaaaa adipiscing elit
理想的输出:
Lorem ipsum w w saaa dolor sit amet, consectetur aw awwww adipiscing elit
答案 0 :(得分:5)
sed 's/waa*\b/w/g' file
sed 's/waa*\>/w/g' file
或使用扩展正则表达式:
sed -r 's/wa+\b/w/g' file
\b
和\>
是字边界。有关详细信息,请参阅此正则表达式教程:Word Boundaries。
答案 1 :(得分:0)
使用bash,使用extended pattern matching删除字符串末尾的所有“a”:
shopt -s extglob
for str in "waaa" "wwwaaaaa" "wa"; do
new="${str%%+(a)}ZZZ"
echo "$str => $new"
done
waaa => wZZZ
wwwaaaaa => wwwZZZ
wa => wZZZ