我正在尝试在行尾删除 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
多次出现不是:(
我可能只是犯了一些非常愚蠢的错误,有什么帮助吗?谢谢。
试试这个's/\(.*[^A]\)AA*$/\1/p'
为什么+
不起作用:
因为这里只是一个普通的角色。
为什么's/\(.*\)AA*$/\1/p'
不起作用:
因为 reg-ex 引擎是急切的,.*
所以A
除了AA*
. 并且A*
什么都不匹配。
这可能对您有用:
sed -n 's/AA*$//p' file
这将替换行尾的一个A
和零个或多个A
,什么都没有。
注意
sed -n 's/A*$//p file'
会产生正确的字符串,但它会在每一行上运行,因此会产生误报。
您可以使用 perl:
> echo "SALALAA" | perl -lne 'if(/(.*?)[A]+$/){print $1}else{print}'
SALAL
使用awk
awk '{sub(/AA$/,"A")}1' pokusni
SALALA
编辑正确的版本,A
从行尾删除所有内容。
awk '{sub(/A*$/,x)}1' pokusni