3

我需要对命令grep的结果列表进行完全匹配。ls

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

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

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


我在安卓设备上执行这个操作。所以这里是完整的命令:

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

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

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


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

如何 grep-the-exact-match

匹配准确词使用 grep

4

4 回答 4

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$'
于 2012-10-22T14:19:21.947 回答
0

有问题grep吗?怎么样awk

ls | awk '$1 == "init"'
于 2012-10-22T14:25:56.737 回答
0

问题是您想要执行外壳扩展/grepping/等哪个外壳(设备或您的电脑)?

如果您希望您的设备进行处理,命令应该是

adb shell "ls / | grep ^init$"

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

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

但话又说回来,正如许多其他人所建议的那样,当您知道确切的文件名时 - 只需检查它是否存在,无需 grepping

adb shell "[ -f '/init' ] && echo 'found'"
于 2012-10-27T00:12:07.783 回答
0

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

grep -E "^init$"
于 2012-10-22T14:18:24.747 回答