Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法匹配sed regexp中多次出现的字符_Regex_Sed - Fatal编程技术网

无法匹配sed regexp中多次出现的字符

无法匹配sed regexp中多次出现的字符,regex,sed,Regex,Sed,我正在尝试删除行末尾的As alice$ cat pokusni SALALAA alice$ sed -n 's/\(.*\)A$/\1/p' pokusni SALALA awk '{sub(/A*$/,x)}1' pokusni 一个A被移除就可以了 alice$ sed -n 's/\(.*\)A+$/\1/p' pokusni alice$ sed -n 's/\(.*\)AA*$/\1/p' pokusni SALALA 多次出现不包括: 我可能只是犯了个愚蠢的错误,有

我正在尝试删除行末尾的As

alice$ cat pokusni 
SALALAA
alice$ sed -n 's/\(.*\)A$/\1/p' pokusni 
SALALA
awk '{sub(/A*$/,x)}1' pokusni 
一个A被移除就可以了

alice$ sed -n 's/\(.*\)A+$/\1/p' pokusni 
alice$ sed -n 's/\(.*\)AA*$/\1/p' pokusni
SALALA
多次出现不包括:

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

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

为什么+不起作用:

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

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

因为reg ex引擎是急切的,所以除了AA*中指定的最终A之外,.*将消耗多达。A*将不匹配任何内容。

使用awk

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

alice$ cat pokusni 
SALALAA
alice$ sed -n 's/\(.*\)A$/\1/p' pokusni 
SALALA
awk '{sub(/A*$/,x)}1' pokusni 
您可以使用perl:

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

这可能适合您:

sed -n 's/AA*$//p' file
这将用零替换行末尾的A和零或多个A

注意


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

多次出现并不仅仅是两次。替换零件应该是空的。这不会打印不包含任何A的行,只会跳过它们。@Jotne我想问这个问题的人只想打印从行尾删除一个或多个A的行。你是对的,他没有告诉任何关于其他台词的事情。谢谢你非常好的解释。这跳过了没有匹配的台词。