如何在单词(regex,grep)之后停止搜索?

时间:2013-07-25 12:23:42

标签: regex linux perl grep

嗨,我想在结束这个词的时候停止搜索。

例如:

ls -al | grep adh

这是我的搜索...我想在“h”之后停止

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

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

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

6 个答案:

答案 0 :(得分:4)

使用$作为行尾:

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

答案 1 :(得分: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的结尾应为字边界

等等......可能更有技巧的正则表达式专家会建议更多的可能性..

答案 2 :(得分:0)

一般来说:

command that generates output | grep pattern | head -1

为您提供命令打印的行中第一次出现的模式。像:

ls -l | grep " adh$" | head -1

答案 3 :(得分: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应该做你想做的事。

答案 4 :(得分:0)

嗯,对于初学者 - 不要解析ls这通常是个坏消息。

但是,由于这被标记为perl,我将提供一个令人满意的答案:

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

glob扩展目录模式。

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

(所以你可以,例如:

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

使用该名称过滤文件(-f文件测试)。或者运行stat或其他东西。

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

答案 5 :(得分:-2)

你可以试试这个:

ls -al | grep -Fx adh

其中,

-F, --fixed-strings

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

-x, --line-regexp

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