Linux 检查字符串是否作为单独的单词存在(而不是另一个的子字符串)

Linux Check if string exists as separate word (not as substring of another)

我有一个包含字符串的文件,我想检查该文件中是否存在一个字符串作为单独的词。 示例:

string = rambox

"grep" 命令将告知 "rambox" 存在

"grep" 命令会告诉 "rambox" 存在,因为它作为路径 "initrd=yahya/rambox/initramfs11.cpio.gz" 的子字符串存在,这是不正确的。 我想获得 "rambox" 在第二个例子中不存在。有办法吗?

您可以将 grep-P 标志一起使用:

grep -P '^rambox | rambox$| rambox '

甚至更好:

grep -P '(^| )rambox($| )'
  • ^ 匹配行首
  • $ 匹配行尾
  • | 是 OR 正则表达式
  • -P, --perl-regexp PATTERN 是一个 Perl 正则表达式

听起来您希望 "rambox" 被任意数量的白色包围,space 或者在行的开头或结尾。 \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

即使是 Maroun Maroun sims 的答案,我也会通过这个正则表达式 [[:space:]] 更改 space,它将涵盖所有免费的 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
#