簡體   English   中英

無法匹配sed正則表達式中多次出現的字符

[英]cannot match multiple occurrences of character in sed regexp

我正在嘗試在行尾刪除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

NB

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

會產生正確的字符串,但是會在每一行上運行,因此會產生誤報。

使用awk

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

編輯正確的版本,從行尾刪除所有A

awk '{sub(/A*$/,x)}1' pokusni 

您可以使用perl:

> echo "SALALAA" | perl -lne 'if(/(.*?)[A]+$/){print $1}else{print}'
SALAL

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM