我需要grep
与ls
命令的结果列表完全匹配。
例如,如果我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”作为参数时,它们都没有返回结果。
答案 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'"