Regex 从行中捕获特殊字符
我想从一行中捕捉特殊角色:Regex 从行中捕获特殊字符,regex,bash,awk,grep,Regex,Bash,Awk,Grep,我想从一行中捕捉特殊角色: var=`echo "#this is comment" | grep "[^a-zA-Z0-9 \t]"` echo $var 预期输出:# 但是得到:#这是评论 有人能帮帮我吗。看来你想要的东西更像: var=`echo "#this is comment" | sed 's/[^a-zA-Z0-9 \t]//g;'` 使用sed将替换字符;使用grep仅搜索字符 编辑:请注意,\t构造不保证可移植到所有系统或地区;我相信如果您的sed支持POSIX正则表达式
var=`echo "#this is comment" | grep "[^a-zA-Z0-9 \t]"`
echo $var
预期输出:#
但是得到:#这是评论
有人能帮帮我吗。看来你想要的东西更像:
var=`echo "#this is comment" | sed 's/[^a-zA-Z0-9 \t]//g;'`
使用sed
将替换字符;使用grep
仅搜索字符
编辑:请注意,
\t
构造不保证可移植到所有系统或地区;我相信如果您的sed
支持POSIX正则表达式,那么使用[:space:][/code>可能会更好。(谢谢@ghoti!)看起来你想要的东西更像:
var=`echo "#this is comment" | sed 's/[^a-zA-Z0-9 \t]//g;'`
使用sed
将替换字符;使用grep
仅搜索字符
编辑:请注意,\t
构造不保证可移植到所有系统或地区;我相信如果您的sed
支持POSIX正则表达式,那么使用[:space:][/code>可能会更好。(谢谢@ghoti!)
我已经删除了\t
,因为它不可移植
如标签所示,如果您想使用awk实现这一点,您可以使用以下内容:
var=$(echo "$string" | awk '{gsub(/[a-zA-Z0-9 ]/, "")} 1')
请注意,这些可能不是实现您想要实现的目标的好方法。如果您发布更多的代码,向我们展示一些上下文,我们可以帮助您避免错误
当然,如果您愿意,您也可以直接在bash中进行这样的替换
var=${string//[A-Za-z0-9 ]}
当您不需要额外的程序时,您可以避免调用它,从而节省CPU和时间
我已经删除了\t
,因为它不可移植
如标签所示,如果您想使用awk实现这一点,您可以使用以下内容:
var=$(echo "$string" | awk '{gsub(/[a-zA-Z0-9 ]/, "")} 1')
请注意,这些可能不是实现您想要实现的目标的好方法。如果您发布更多的代码,向我们展示一些上下文,我们可以帮助您避免错误
当然,如果您愿意,您也可以直接在bash中进行这样的替换
var=${string//[A-Za-z0-9 ]}
您可以在不需要的时候避免调用额外的程序,从而节省CPU和时间。sed
可用于此目的,但tr
是更好的选择:
echo "#this is comment" | tr -d 'a-zA-Z0-9 \t'
tr
还支持字符类,如[:space://code>和[:alpha://code>sed
可用于此,但tr
是更好的选择:
echo "#this is comment" | tr -d 'a-zA-Z0-9 \t'
tr
还支持字符类,如[:space://code>和[:alpha://code>该\t
不可移植,在OSX、BSD、Solaris、HPUX等中被忽略。OP没有提到他的平台。如果您想包含一个选项卡,可以使用一些可移植的工具,或者指定答案的限制。var=
echo“#这是注释”| sed的/[a-zA-Z0-9\t]//g;`works charm,感谢您的快速响应,您节省了我的时间。\t
不可移植,在OSX、BSD、Solaris、HPUX等中被忽略。OP没有提到他的平台。如果您想包含一个选项卡,可以使用一些可移植的工具,或者指定答案的限制。var=
echo“#这是注释”| sed的/[a-zA-Z0-9\t]//g;`作品魅力,感谢您的快速响应,您节省了我的时间。