哪种 grep 模式允许仅打印一个单词的行?

哪种 grep 模式允许仅打印一个单词的行?

grep我想在文本上使用时打印仅包含一个无空格字符子序列的行。

title之后应该打印title

the sentencegrapping 之后不应打印任何内容

答案1

要打印仅包含(至少一个)非空白字符的行,请使用以下方法之一:

grep -x '[^[:space:]]\+'
grep -Ex '[^[:space:]]+'

或者使用 PCRE 模式:

grep -Px '\S+'

POSIX 字符类\[:space:\]火柴:

空格字符(包括:空格、制表符、换行符、回车符、换页符和垂直制表符)

-x选项告诉grep选择与模式完全匹配的行(例如,就像您使用了一样^\S+$)。

答案2

无标点

grep -E '^\w*[[:alpha:]]\w*$' file

...只会匹配可能的(零个或多个*)单词字符\w(字母、数字和下划线),这些字符跨越整行,^...$并且至少包含一个严格的字母字符[[:alpha:]]...原因是匹配包含数字和/或下划线的单词,如1st_partTitle2Loc8tor......等,并排除所有数字,如123456

带标点

此外,为了包含带有标点符号的单词,如、、、、Title.和...等,请添加相关的字符类,Title:如下所示:Title,(Title)-titlelong-title[[:punct:]]

grep -E '^[[:punct:]]*\w*[[:punct:]]*[[:alpha:]]\w*[[:punct:]]*$' file

注意

  • 所有上述表达式都应与任何区域设置的字符匹配(包括 UNICODE)。

  • 上述表达式可能-E, --extended-regexp不需要,但如果您决定扩展它们(这是预期的),它就会存在。

答案3

您也许可以使用 grep 的 -v 选项:

$ grep -v ' ' 1word | grep .
I
want
lines
subsequences
title

在哪里:

$ cat 1word 
I
want
to print the
lines
 with only
one 
no-spaces 
subsequences
 of characters while use grep on the text.

title
 after grepping should to print title

the sentence
 after
 grepping should not print anything

相关内容