我有一个包含字符串的文件,我想检查该文件中是否存在字符串作为单独的单词。 例如:
string = rambox
包含“rambox”的文件:
initrd = yahya / rambox / initramfs11.cpio.gz rambox ramdisk_size = 5242880 ...
“grep”命令会告诉“rambox”存在
文件不包含“rambox”
initrd = yahya / rambox / initramfs11.cpio.gz ramdisk_size = 5242880 ...
“grep”命令会告诉“rambox”存在,因为它存在于路径“initrd = yahya / rambox / initramfs11.cpio.gz”的子串中,这是不正确的。 我想获得第二个例子中不存在“rambox”。有办法吗?
答案 0 :(得分:3)
您可以将grep
与-P
标志一起使用:
grep -P '^rambox | rambox$| rambox '
甚至更好:
grep -P '(^| )rambox($| )'
^
匹配行的开头$
匹配行尾|
是OR regex -P, --perl-regexp
PATTERN是一个Perl正则表达式答案 1 :(得分:1)
听起来像你想要" rambox"被任何数量的空白包围或在线的开头或结尾处。 \b
和其他字边界解决方案(例如,grep -w
)在此处无法使用,因为/
计为非单词。
你可以write your own interpretation of "word boundary",但在这个简单的情况下,它并不值得。
对于这种情况,我可能只是手动处理行和行尾方案的开头:
$ cat -vet junk
rambox$
rambox$
rambox $
rambox$
foo rambox bar$
foo rambox bar$
/rambox/$
ramboxfoo$
ramboxfoo $
foorambox$
foorambox $
$ egrep '(^\s*rambox\s+|\s+rambox\s+|\s+rambox\s*$)' junk
rambox
rambox
rambox
foo rambox bar
foo rambox bar
答案 2 :(得分:1)
即使是Maroun Maroun的答案也是正确的,我会通过这个regexp [[:space:]]来改变空间,这将覆盖所有可用空间,例如tab
输入文件
# cat testfile
rambox test test
testrambox test test
test test rambox with tab
test test rambox
test testrambox
#
输出:
# grep -P '(^|[[:space:]])rambox($|[[:space:]])' testfile
rambox test test
test test rambox with tab
test test rambox
#