嗨,一旦我到达单词的末尾,我想停止搜索。
例如:
ls -al | grep adh
那是我的搜索......我想在“h”之后停下来
我正在搜索的目录有两个实例adh
,有adh2
和adh
......我只是adh
不想adh2
!
希望这是有道理的,任何问题请提出:)
仅供参考,我是 Linux/perl 初学者!
使用$
for 行尾:
ls -al | grep " adh$"
应该成功。
$ touch faaa
$ touch faaa2
$ touch faaa3
$ touch afaaa
$ ls -al | grep faaa
-rw-rw-r-- 1 me me 0 Jul 25 14:24 afaaa
-rw-rw-r-- 1 me me 0 Jul 25 14:24 faaa
-rw-rw-r-- 1 me me 0 Jul 25 14:24 faaa2
-rw-rw-r-- 1 me me 0 Jul 25 14:24 faaa3
$ ls -al | grep faaa$
-rw-rw-r-- 1 me me 0 Jul 25 14:24 afaaa
-rw-rw-r-- 1 me me 0 Jul 25 14:24 faaa
$ ls -al | grep " faaa$"
-rw-rw-r-- 1 me me 0 Jul 25 14:24 faaa
通常,您应该在adh
.
Fedorqui 的回答是好的,如果你的话在行尾,那么:
adh$
mean - 匹配adh
和行尾。
这不适用于空格分隔的单词,例如
adh something
adh2 another
在类似的情况下,你应该写:
grep 'adh '
匹配adh
和<space>
或
grep `adh[^a-z0-9A-Z]`
匹配adh
以及除字母和数字之外的任何内容,或者您可以使用perl regex
grep -P `adh\b`
结尾adh
应该是单词边界
等等......可能,更熟练的正则表达式专家会提出更多的可能性......
一般来说:
command that generates output | grep pattern | head -1
让您在命令打印的行中首次出现模式。喜欢:
ls -l | grep " adh$" | head -1
grep
有一个-w
选项:
-w, --word-regexp
Select only those lines containing matches that form whole
words. The test is that the matching substring must either be
at the beginning of the line, or preceded by a non-word
constituent character. Similarly, it must be either at the end
of the line or followed by a non-word constituent character.
Word-constituent characters are letters, digits, and the
underscore.
所以在你的情况下,grep -w adh
应该做你想做的事。
好吧,对于初学者来说 - 不要解析ls
这通常是坏消息。
但由于这是标记perl
的,我将提供一个错误的答案:
perl -e 'print join "\n", grep { /adh\b/ } glob "*"'
glob
扩展目录模式。
grep
是......就像 grep,因为它需要正则表达式,但它实际上也可以使用任意代码块。
(所以你可以,例如:
grep { -f && /adh\b/ }
仅过滤具有该名称的文件(-f
文件测试)。或者运行一个stat
什么的。
join
做它所说的 - 将多个结果与连接字符结合在一起,在这种情况下是换行符。
你可以试试这个:
ls -al | grep -Fx adh
在哪里,
-F, --fixed-strings
将 PATTERN 解释为固定字符串的(列表)。
-x, --line-regexp
仅选择与整行完全匹配的匹配项。