grep完全匹配

时间:2012-10-22 14:15:24

标签: android linux grep adb

我需要grepls命令的结果列表完全匹配。

例如,如果我ls一个目录,这里是结果:

system
sys
sbin
proc
init.rc
init.mahimahi.rc
init.goldfish.rc
init

我想grep查看是否存在名为“init”的文件。我需要grep才能返回一个结果。列表中只有一个名为“init”的文件。


我在Android设备上执行此操作。所以这是完整的命令:

adb shell ls / | grep -E "^init$"

我需要检查android设备上是否存在目录,然后在目录存在时执行操作。

我在批处理脚本中使用find之前已经这样做了,但我需要在linux上使用bash执行此操作,并且我希望完全匹配。如果有另一个目录或文件包含我正在搜索的字符串,这将避免此问题。


我已经尝试过以下链接中的建议,但是当我将“init”作为参数时,它们都没有返回结果。

how-to-grep-the-exact-match

match-exact-word-using-grep

4 个答案:

答案 0 :(得分:4)

假设ls文件与文件系统无关(因此您无法使用文件系统),grep '^init$'应该可以解决问题。


xxd结果:

00000a0: 2e67 6f6c 6466 6973 682e 7263 0d0a 696e  .goldfish.rc..in
00000b0: 6974 0d0a 6465 6661 756c 742e 7072 6f70  it..default.prop

基于这个hexdump,我建议你先把它变成unix风格:

adb shell ls /|tr -d '\015'|grep '^init$'

答案 1 :(得分:0)

要获得完全匹配,您必须使用-E参数激活正则表达式,并使用行的开头和行尾符号:

grep -E "^init$"

答案 2 :(得分:0)

grep是否有问题? awk怎么样?

ls | awk '$1 == "init"'

答案 3 :(得分:0)

问题是你要做shell扩展/ grepping / etc的shell(设备或你的pc)?

如果您希望设备进行处理,则命令应为

adb shell "ls / | grep ^init$"

如果你想让你的电脑完成这项工作,那么命令就是

adb shell "ls /" | tr -d '\r' | grep ^init$

但是,正如许多其他人所建议的那样,当你知道确切的文件名时 - 只需检查它是否存在,不需要grepping

adb shell "[ -f '/init' ] && echo 'found'"