3

grepコマンドの結果のリストで完全に一致する必要がありlsます。

たとえば、ilsがディレクトリで、次のような結果が得られた場合:

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

grep「init」という名前のファイルが存在するかどうかを確認したいと思います。grep1つの結果のみを返す必要があります。リストには「init」という名前のファイルが1つだけあります。


私はAndroidデバイスでこの操作を実行しています。だからここに完全なコマンドがあります:

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

Androidデバイス上のディレクトリの存在を確認してから、ディレクトリが存在する場合はアクションを実行する必要があります。

バッチスクリプトで使用する前にこれfindを実行しましたが、Linuxでこれを実行する必要がありbash、完全に一致させる必要があります。これにより、検索している文字列を含む別のディレクトリまたはファイルがある場合に問題が回避されます。


次のリンクで提案を試しましたが、パラメーターとして「init」を指定すると、すべて結果が返されません。

how-to-grep-the-exact-match

match-exact-word-using-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

この16進ダンプに基づいて、最初にUNIXスタイルに変更することをお勧めします。

adb shell ls /|tr -d '\015'|grep '^init$'
于 2012-10-22T14:19:21.947 に答える
0

完全に一致させるには、-Eパラメーターを使用して正規表現をアクティブにし、行頭記号と行末記号を使用する必要があります。

grep -E "^init$"
于 2012-10-22T14:18:24.747 に答える
0

問題はありgrepますか?どうawkですか?

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

問題は、シェル拡張/グレッピングなどを実行するシェル(デバイスまたはPC)ですか?

デバイスに処理を実行させる場合、コマンドは次のようになります。

adb shell "ls / | grep ^init$"

PCにその仕事をさせたい場合、コマンドは次のようになります。

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

しかし、繰り返しになりますが、他の多くの人が示唆しているように、正確なファイル名がわかっている場合は、ファイル名が存在するかどうかを確認するだけで、greppingは必要ありません。

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