0

行末の As を削除しようとしています。

alice$ cat pokusni 
SALALAA
alice$ sed -n 's/\(.*\)A$/\1/p' pokusni 
SALALA

1つの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'機能しない理由:

正規表現エンジンは積極的であるため、 で指定された最後の A を除いて s.*と同じ数を消費します。そして、何も一致しません。AAA*A*

于 2013-09-17T01:55:05.117 に答える
2

これはあなたのために働くかもしれません:

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

これは、行末のAおよび 0 個以上の を何も置き換えません。A

注意

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

正しい文字列を生成しますが、すべての行で動作するため、誤検知が発生します。

于 2013-09-17T08:57:14.023 に答える
1

使用するawk

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

EDIT正しいバージョンで、A行末からすべてを削除します。

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