Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.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
Regex 从行中捕获特殊字符_Regex_Bash_Awk_Grep - Fatal编程技术网

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;`作品魅力,感谢您的快速响应,您节省了我的时间。