0

我正在尝试在行尾删除 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

多次出现不是:(

我可能只是犯了一些非常愚蠢的错误,有什么帮助吗?谢谢。

4

4 回答 4

5

试试这个's/\(.*[^A]\)AA*$/\1/p'


为什么+不起作用:

因为这里只是一个普通的角色。

为什么's/\(.*\)AA*$/\1/p'不起作用:

因为 reg-ex 引擎是急切的,.*所以A除了AA*. 并且A*什么都不匹配。

于 2013-09-17T01:55:05.117 回答
2

这可能对您有用:

sed -n 's/AA*$//p' file

这将替换行尾的一个A和零个或多个A,什么都没有。

注意

sed -n 's/A*$//p file' 

会产生正确的字符串,但它会在每一行上运行,因此会产生误报。

于 2013-09-17T08:57:14.023 回答
1

您可以使用 perl:

> echo "SALALAA" | perl -lne 'if(/(.*?)[A]+$/){print $1}else{print}'
SALAL
于 2013-09-17T05:26:38.610 回答
1

使用awk

awk '{sub(/AA$/,"A")}1' pokusni 
SALALA

编辑正确的版本,A从行尾删除所有内容。

awk '{sub(/A*$/,x)}1' pokusni 
于 2013-09-17T05:21:35.797 回答