我想删除字符串末尾的任何ABC。
我能想到的最好方法是
echo ${String}| sed -e 's/["ABC"]*$//g'
然而,它将删除字符串末尾的所有A、B或C。
如果字符串为DAAAAABCBBBCCABCABC,如果我使用上述表达式,它将返回"D",而不是"DAAAAABCBBBCC"。
有没有更好的方法来做到这一点?谢谢。
bash 可以在内部完成此操作。以下命令可以删除任何位于结尾的 "ABC" 字符串,并且其结果可以用于变量赋值、命令等等:
```bash
str="this is ABC"
result="${str%%ABC}"
echo "$result"
```
${String%ABC}
您也可以使用正则表达式而不仅仅是简单的字符串匹配。请参见http://tldp.org/LDP/abs/html/string-manipulation.html
这个应该可以工作:
echo "DAAAAABCBBBCCABCABC" | sed -e 's/\(ABC\)*$//g'
结果:
DAAAAABCBBBCC
将字符串用括号括起来,*
应用于括号内的所有字母,并且按照精确顺序应用。
sed -e 's/\(;;\)*$//g' foo.csv
无法删除行尾的 ;;
?例如,我有一行 County;4;5;0;20;4;5;4;5;;
,输出结果仍然相同。 - Sigur您应该使用:
sed -E 's/(ABC)+$//'
或者:
sed -r 's/(ABC)+$//'
两者都会输出:
DAAAAABCBBBCC
sed -e 's/^[0-9]+//'
不起作用感到困惑。通常十年前的技术答案已经过时了,但这个不是。谢谢! - Jimsed -e 's/^[0-9]+//'
为什么不起作用感到困惑。通常十年前的技术答案已经过时了,但这个答案却没有。谢谢! - Jim
ABC
。这种Shell参数扩展使用glob,因此无法用它来表示“任意数量的ABC”。更多信息:http://www.gnu.org/software/bash/manual/bashref.html#Shell-Parameter-Expansion - Maic López Sáenzshopt -s extglob
),@LopSae 的代码可以正常工作:${String%%+(ABC)}
。 - Benjamin W.