我需要找到一个文件中用空格包围的单词。
文件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
运作良好。
哪个空白区域最容易接受?请告诉我。
答案 0 :(得分:3)
要匹配空格或制表符,您可以使用[[:blank:]]
。无论区域设置如何,都将其定义为空格或制表符。
在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
修改强>:
关于\t
和grep
:
$ 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
要好得多。