Regex 在sed中组合两个正则表达式规则以从字符串中删除不需要的字符

Regex 在sed中组合两个正则表达式规则以从字符串中删除不需要的字符,regex,bash,sed,Regex,Bash,Sed,我正在尝试删除所有非字母数字字符、非空格字符和非破折号非下划线字符 echo "$1" |sed 's/[^a-zA-Z0-9[:space:]]//g' 我想要像这样的东西 echo "$1" |sed 's/[^\-\_a-zA-Z0-9[:space:]]//g' 如何将两个正则表达式规则混合在一起 示例输入为: a-b a_b ab a.. a.b a b a %b a ^&n 我想要这个输出: a-b a_b ab a ab a b a b a n 这适用于GNU

我正在尝试删除所有非字母数字字符、非空格字符和非破折号非下划线字符

echo "$1" |sed 's/[^a-zA-Z0-9[:space:]]//g'
我想要像这样的东西

echo "$1" |sed 's/[^\-\_a-zA-Z0-9[:space:]]//g'
如何将两个正则表达式规则混合在一起

示例输入为:

a-b
a_b
ab
a..
a.b
a   b
a %b
a ^&n
我想要这个输出:

a-b
a_b
ab
a
ab
a b
a b
a n
这适用于GNU sed:

sed的//[^-_a-zA-Z0-9[:space:]///g”文件
$cat文件 a-b a_b ab A. a、 b a b a%b a^&n $sed的/[^-_a-zA-Z0-9[:space:][]//g'文件 a-b a_b ab A. ab a b a b a n
你的第二正则表达式有什么问题?请考虑添加示例输入和当前输出。这看起来应该是可行的。祝你好运。我的第二个正则表达式将错误作为无效的范围运算符,如果我将其更改为:sed的//[^-]a-zA-Z0-9[:space:]//g'没有更多错误,但不起作用。
sed的//[^-\[:alnum:::[:space:]//g'文件
也可以起作用。 $ cat file a-b a_b ab a.. a.b a b a %b a ^&n $ sed 's/[^-_a-zA-Z0-9[:space:]]//g' file a-b a_b ab a ab a b a b a n