grep
我想在文本上使用时打印仅包含一个无空格字符子序列的行。
title
之后应该打印title
the sentence
grapping 之后不应打印任何内容
答案1
要打印仅包含(至少一个)非空白字符的行,请使用以下方法之一:
grep -x '[^[:space:]]\+'
grep -Ex '[^[:space:]]+'
或者使用 PCRE 模式:
grep -Px '\S+'
空格字符(包括:空格、制表符、换行符、回车符、换页符和垂直制表符)
该-x
选项告诉grep
选择与模式完全匹配的行(例如,就像您使用了一样^\S+$
)。
答案2
无标点
grep -E '^\w*[[:alpha:]]\w*$' file
...只会匹配可能的(零个或多个*
)单词字符\w
(字母、数字和下划线),这些字符跨越整行,^...$
并且至少包含一个严格的字母字符[[:alpha:]]
...原因是匹配包含数字和/或下划线的单词,如1st_part
,Title2
和Loc8tor
......等,并排除所有数字,如123456
。
带标点
此外,为了包含带有标点符号的单词,如、、、、Title.
和...等,请添加相关的字符类,Title:
如下所示:Title,
(Title)
-title
long-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