GREP输出带有特殊字符的行除外

时间:2015-05-01 08:43:00

标签: regex sed grep

我正在尝试向grep -v [[:punct:]]添加例外,不要排除带有某些预定义特殊字符的行。在以下示例中:-_

输入:

Color red
Color _ yellow
Color blu+e
Color gr-een
Color bla!ck

预期产出:

Color red 
Color _ yellow
Color gr-een

2 个答案:

答案 0 :(得分:2)

使用awk即可:

awk '/[-_]/ || !/[[:punct:]]/' file
Color red
Color _ yellow
Color gr-een

这得到以下任何一行:

  • -_
  • 不包含[[:punct:]]

要解决像Color _ yellow !这样的行的问题,您可以执行以下操作:

awk '/[-_]/ {a=$0;gsub(/[-_]/,"",a);if (a!~/[[:punct:]]/) print} !/[[:punct:]]/' file

答案 1 :(得分:1)

不要弄清楚要排除的内容,而是要说明要保留的内容:

grep '^[[:alnum:][:blank:]_-]*$'