如何在文本中找到空格。使用grep?


13

如何在文本中添加一个空格?

cat a.txt| grep ' '

要么

cat a.txt| grep '\s '

7
cat两种情况下都应免费使用。可以写第一个grep ' ' a.txt,第二个进行类似的更改。
MadHatter

1
请注意,它\s也匹配制表符,返回,垂直制表符,换页以及技术上的换行符。如果只想匹配空格和制表符,请使用[[:blank:]][ \t]
暂停,直到另行通知。

使用gnu grep,您可以将匹配项(-m选项)限制为一个...
sendmoreinfo 2013年

这是更简单的egrep“ \ s” a.txt

Answers:


6

如果您只想在问题中输入grep仅占一个空格,则可以使用以下方法:

grep -e '^\s[^\s]' -e '[^\s]\s$' -e '[^\s]\s[^\s]' a.txt

或针对POSIX变体:

grep -e '^ [^ ]' -e '[^ ] $' -e '[^ ] [^ ]' a.txt

或可读性较差的POSIX变体:

grep '\(^\|[^ ]\)\ \([^ ]\|$)' a.txt

假设您要排除包含多个相邻空格的行,则这明确要求存在一个空格,该空格前面没有空格,后面也没有空格。

另外,值得注意的是,并非所有grep版本都支持'\ s'正则表达式控件。


1
您可以使用上一个示例省略所有这些反斜杠,并使用-E启用扩展正则表达式的POSIX指定选项来提高可读性。grep -E '(^|[^ ]) ([^ ]|$)' a.txt无论如何,在空格前都不需要反斜杠,并且在最后的右括号之前还缺少一个反斜杠。此外,对于版本grep能够理解\s,你可以缩短非空间表达[^\s]\S
暂停,直至另行通知。

但这也有效,[[:: blank:]]
Emax 2013年


1

变体2只会找到两个空格。如果'\s'改用,则两种变体都可以使用。

您可以轻松地自己测试一下,那么您的实际问题是什么?


1
为什么只找到两个空间?我认为它可以匹配任何空间。
cuonglm

1
@Gnouc:他所写的变体2 '\s '将连续至少匹配两个空格,因为他在字符组之后添加了一个空格字符\s
2013年

您是对的,我没\s看错,是我的错。
cuonglm
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.