How to remove last characters from a string in bash using sed?
我想通过修改最后的所有"a"来改变所有出现的事件,如"waaa","wwwaaaaa","wa"。
waaa> w
wwa> ww
waaaaa> w
我知道如何使用正则表达式在文本中找到这些字符串:
1 | grep -nE"wa+" file.txt |
我也知道如何在bash脚本中更改一个字符串
1 2 3 4 | #!/bin/bash s1="wwwwaaaaaaaa" s2=${s1%w*} echo"$s1 --> $s2" |
(修改后的脚本来自https://stackoverflow.com/a/27658717/5219155)
但是我想使用像
1 | sed -E 's/wa+/ZZZ/' file.txt |
ZZZ是我需要的东西。
1 | sed -E 's/wa+/${$1%w*}/' file.txt |
不起作用。
样本输入:
1 2 | Lorem ipsum wa waaaaaaa saaa dolor sit amet, consectetur aw awwwwaaaa adipiscing elit |
理想的输出:
1 2 | Lorem ipsum w w saaa dolor sit amet, consectetur aw awwww adipiscing elit |
1 | sed 's/waa*\b/w/g' file |
1 | sed 's/waa*\>/w/g' file |
或使用扩展正则表达式:
1 | sed -r 's/wa+\b/w/g' file |
使用bash,使用扩展模式匹配从字符串末尾删除所有"a":
1 2 3 4 5 | shopt -s extglob for str in"waaa""wwwaaaaa""wa"; do new="${str%%+(a)}ZZZ" echo"$str => $new" done |
1 2 3 | waaa => wZZZ wwwaaaaa => wwwZZZ wa => wZZZ |