如何停止搜索单词(regex、grep)?

如何停止搜索单词(regex、grep)?,regex,linux,perl,grep,Regex,Linux,Perl,Grep,嗨,我想一到单词的末尾就停止搜索 例如: ls -al | grep adh grep { -f && /adh\b/ } 那是我的搜索。。。我想在“h”之后停下来 我正在搜索的目录有两个实例adh,分别是adh2和adh。。。我只想要adh而不是adh2 希望这是有意义的,任何问题请问:) F.Y.I 我是Linux/perl初学者 使用$作为行尾: ls -al | grep " adh$" 应该可以 试验 一般而言: command that generates o

嗨,我想一到单词的末尾就停止搜索

例如:

ls -al | grep adh
grep { -f && /adh\b/ } 
那是我的搜索。。。我想在“h”之后停下来

我正在搜索的目录有两个实例
adh
,分别是
adh2
adh
。。。我只想要
adh
而不是
adh2

希望这是有意义的,任何问题请问:)

F.Y.I
我是Linux/perl初学者

使用
$
作为行尾:

ls -al | grep " adh$"
应该可以

试验 一般而言:

command that generates output | grep pattern | head -1
提供命令打印的行中第一次出现的图案。比如:

ls -l | grep " adh$" | head -1
您可以尝试以下方法:

ls -al | grep -Fx adh
在哪里,

-F, --fixed-strings
将模式解释为固定字符串(列表)

-x, --line-regexp

仅选择与整行完全匹配的匹配项。

通常,您应该指定在您的
adh
之后允许的内容

Fedorqui的回答是可以的,如果你的话在这行的末尾,那么:

adh$
平均值-匹配adh和行尾

这不适用于空格分隔的单词,如

adh something
adh2 another
在类似情况下,您应该写:

grep 'adh '
匹配
adh

grep `adh[^a-z0-9A-Z]`
匹配
adh
和除字母和数字以外的任何内容,或者可以使用
perl regex

grep -P `adh\b`
adh
的结尾应该是单词边界


等等。。。也许,更熟练的正则表达式专家会建议更多的可能性。

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-wadh
应该做你想做的事。

好吧,首先,不要解析
ls
,这通常是个坏消息

但是,由于这被标记为
perl
,我将提供一个更精确的答案:

perl -e 'print join "\n", grep { /adh\b/ } glob "*"'
glob
扩展目录模式

grep
是。。。与grep一样,它需要正则表达式,但实际上也可以使用任意代码块

(例如,您可以:

ls -al | grep adh
grep { -f && /adh\b/ } 
只筛选具有该名称的文件(
-f
file test)。或者运行
stat
或其他操作


join
按它所说的做-用join字符将多个结果粘在一起,在本例中是换行符。

虽然结果是所需的,但我想这不是只得到第一个结果的问题,而是跳过
adh[something]
的结果。是的,不管“在'h'之后停止”意思是……但只要按词汇快速排序,就没有什么区别。@fedorqui我已经更新了模式(受您的解决方案启发),但请注意它也不是通用的:例如,我们可以有“aadc”和“adc”。嗯,很好。也许我们可以将
ls-l
(l)改为
ls-1
(一)并执行
grep“^adh$”
要精确匹配
adh
@fedorqui,我认为
grep“adh$”
是我们能做的最好的方法,尽管当除了“adh”之外还有一个名为“blue adh”的文件时,它也会匹配多个文件。也就是说,在Linux上带空格的文件名应该很少见,任何使用它们的人都应该受到惩罚。只使用
ls-al*adh
有什么错?您可能想删除perl标记。这与perl无关。@Phylogenesis仍然可以列出
aadh
acadh…等等。那么,为什么不干脆
ls-ld adh呢
hm…所以
回显一些adh2 | grep-F adh
?您可以使用带有grep.grep-m 1模式文件的-m开关,在第一次匹配后停止。请参阅手册页:OP不希望匹配
adh2
-仅
adh
。请尝试上述方法。您的答案无效,因为
grep-F adh
将匹配
adh2
也是。参考引用的手册页,
固定字符串
的真正含义是什么…很抱歉造成混淆。我的不好。如果这是在用户
adh
创建了一些文件的目录中运行的话,则不是这样。@Ingo如果目的是只搜索文件名,那是真的。不过,OP中没有真正指定这一点-只是搜索“word”。为了避免找到用户名,只需从
ls
中删除
-l
…或使用
awk'$NF==“adh”{print}
。@fedorqui的答案已经与
grep“adh$”
具有类似的功能。叹气。被一个“碰撞”抓住了。