我想在行尾删除As。
alice$ cat pokusni
SALALAA
alice$ sed -n 's/\(.*\)A$/\1/p' pokusni
SALALA
一个A被删除就好了
alice$ sed -n 's/\(.*\)A+$/\1/p' pokusni
alice$ sed -n 's/\(.*\)AA*$/\1/p' pokusni
SALALA
多次出现不是:(
我可能正在做一些非常愚蠢的错误,任何帮助?感谢。
答案 0 :(得分:4)
试试这个's/\(.*[^A]\)AA*$/\1/p'
为什么+
不起作用
因为这里只是一个普通的角色。
为什么's/\(.*\)AA*$/\1/p'
不起作用
由于reg-ex引擎非常渴望,因此除.*
中指定的最终A外,A
将消耗尽可能多AA*
秒的A*
。 {{1}}只会匹配任何内容。
答案 1 :(得分:2)
这可能对您有用:
sed -n 's/AA*$//p' file
这会替换行尾的A
和零个或多个A
。
N.B。
sed -n 's/A*$//p file'
会生成正确的字符串,但它会在每一行上运行,因此产生误报。
答案 2 :(得分:1)
使用awk
awk '{sub(/AA$/,"A")}1' pokusni
SALALA
EDIT
正确的版本,从行尾删除所有A
。
awk '{sub(/A*$/,x)}1' pokusni
答案 3 :(得分:1)
您可以使用perl:
> echo "SALALAA" | perl -lne 'if(/(.*?)[A]+$/){print $1}else{print}'
SALAL