使用grep匹配字符串

时间:2015-09-29 12:05:25

标签: regex unix grep pattern-matching

我想在grep命令中使用正则表达式匹配以下字符串。

文件名为test.txt

Unknown Unknown

Jessica Patiño

Althea Dubravsky 45622

Monique Outlaw 49473

April Zwearcan 45758

Tania Horne 45467

我想从上面的行列表中匹配仅包含特殊字符的行;我确切需要的是'JessicaPatiño',它包含一个非ASCII字符。

我用过,

grep '[^0-9a-zA-Z]' test.txt

但它会返回所有行。

3 个答案:

答案 0 :(得分:2)

以下命令应该返回您想要的行:

grep -v '^[0-9a-zA-Z ]*$' test.txt

说明

  • [0-9a-zA-Z ]匹配空格或任何字母数字字符。
  • 添加星号会匹配任何只包含这些字符的字符串。
  • 使用^预先添加模式,并将$ 锚点字符串附加到行的开头和结尾,以便模式仅匹配包含仅所需的字符。
  • 最后,grep的-v--invert-match选项会反转匹配感,即选择不匹配的行。

答案 1 :(得分:1)

提供的答案应适用于给出的示例文本。但是,你可能会遇到名字中带有连字符或撇号的人等。要搜索所有非ASCII字符,这应该可以解决问题:

@interface ACustomView : UIView
{
    float chartWidth, chartHeight;
}
@property (nonatomic, readwrite) float chartWidth, chartHeight;
@end

-P启用“Perl”模式并允许使用字符代码搜索。 \ x00- \ x1F是控制字符,\ x7F- \ xFF是126以上的所有内容。

答案 2 :(得分:0)

我会用:

grep [^0-9a-zA-Z\s]+ test.txt

live example

或者,甚至更好:

 grep -i "[^\da-z\s]" test.txt