2

嗨,一旦我到达单词的末尾,我想停止搜索。

例如:

ls -al | grep adh

那是我的搜索......我想在“h”之后停下来

我正在搜索的目录有两个实例adh,有adh2adh......我只是adh不想adh2

希望这是有道理的,任何问题请提出:)

仅供参考,我是 Linux/perl 初学者!

4

6 回答 6

4

使用$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
于 2013-07-25T12:24:12.833 回答
1

通常,您应该在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应该是单词边界

等等......可能,更熟练的正则表达式专家会提出更多的可能性......

于 2013-07-25T12:41:40.293 回答
0

一般来说:

command that generates output | grep pattern | head -1

让您在命令打印的行中首次出现模式。喜欢:

ls -l | grep " adh$" | head -1
于 2013-07-25T12:27:33.953 回答
0

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

于 2013-07-25T14:52:42.527 回答
0

好吧,对于初学者来说 - 不要解析ls这通常是坏消息。

但由于这是标记perl的,我将提供一个错误的答案:

perl -e 'print join "\n", grep { /adh\b/ } glob "*"'

glob扩展目录模式。

grep是......就像 grep,因为它需要正则表达式,但它实际上也可以使用任意代码块。

(所以你可以,例如:

grep { -f && /adh\b/ } 

过滤具有该名称的文件(-f文件测试)。或者运行一个stat什么的。

join做它所说的 - 将多个结果与连接字符结合在一起,在这种情况下是换行符。

于 2015-12-30T14:23:57.817 回答
-2

你可以试试这个:

ls -al | grep -Fx adh

在哪里,

-F, --fixed-strings

将 PATTERN 解释为固定字符串的(列表)。

-x, --line-regexp

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

于 2013-07-25T12:33:44.057 回答