grep中哪个空格是最好的标准?

时间:2016-09-22 07:45:32

标签: regex grep

我需要找到一个文件中用空格包围的单词。

文件test.txt

head target_word tail

上面的单词之间的空格可以是制表符。 我试过了

grep -e '\starget_word\s' test.txt

找不到“target_word”。但

grep -e "[[:space:]]target_word[[:space:]]" test.txt

grep -e "[ \t]target_word[ \t]" test.txt

运作良好。

哪个空白区域最容易接受?请告诉我。

4 个答案:

答案 0 :(得分:3)

要匹配空格或制表符,您可以使用[[:blank:]]。无论区域设置如何,都将其定义为空格或制表符。

来自the POSIX spec

  

在POSIX语言环境中,只应包含<space><tab>

     

在区域设置定义文件中,<space><tab>会自动包含在此类中。

您也可以使用[[:space:]],但除了空格和标签之外,还包含其他字符。

答案 1 :(得分:1)

如果您想匹配任何类型的空白 - 取决于您的语言环境 - 请使用[[:space:]]。在C语言环境中,它匹配:制表符,换行符,垂直制表符,换页符,回车符和空格。但是,根据您的区域设置,它可能会匹配在该区域设置中被视为空格的其他字符。

答案 2 :(得分:1)

如果您特别想要说明\t<space>),您可以:

$ cat > target.txt
head target_word tail                         # space-separated
head    target_word     tail                  # tab-separated
$ grep $'[\t ]target' target.txt
head target_word tail
head    target_word     tail

修改

关于\tgrep

$ cat > test
1 1        # space-delimited
2       2  # tab-delimited
$ grep \t test
$ grep '\t' test
$ grep "\t" test
$ grep $'\t' test
2       2
$ grep -V
grep (GNU grep) 2.16
# - -

您使用的是哪个grep?我没有使用\t

答案 3 :(得分:0)

您甚至可以尝试cat test.txt | grep " target_word "

                                 # ^space      ^space 

顺便说一下,您不需要cat。 做grep " target_word " test.txt要好得多。