嗨,我想在结束这个词的时候停止搜索。
例如:
ls -al | grep adh
这是我的搜索...我想在“h”之后停止
我正在搜索的目录有两个adh
个实例,adh2
和adh
...我只想adh
而不是adh2
!
希望这是有道理的,有任何问题请问:)
F.Y.I 我是Linux / perl初学者!
答案 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
仅选择与整行完全匹配的匹配项。