我遇到了一个棘手的正则表达式问题
我有下面的字符串
some_Name _ _Bday Date Comm.txt
这是我的正则表达式,以匹配空格和下划线
\_?\s\_?
Now when i try to replace the string using sed and the above regex
echo "some_Name _ _Bday Date Comm.txt" | sed 's/\_?\s\_?/\_/g'
我想要的输出是
some_Name_Bday_Date_Comm.txt
我对此有任何想法吗?
您正在使用POSIX BRE正则表达式引擎,其\_?\s\_?
模式与_?
,空格(如果sed
支持\s
速记)和_?
子字符串(即,?
被视为文字问号符号)匹配。
您可以使用
sed -E 's/[[:space:]_]+/_/g'
sed 's/[[:space:]_]\{1,\}/_/g'
观看在线sed
演示
在[[:space:]_]+
POSIX ERE模式(启用-E
选项)将匹配一个或多个空格或下划线。
POSIX ERE+
量词可以像\{1,\}
POSIX BRE中那样编写。另外,如果使用GNU sed
,则可以\+
在第二个sed
命令中使用。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句