2013-08-28 12 views
5

'ls -l'のような出力を含むファイルでフルパスでgrepしようとしていますが、一致しません正しく私は、コマンドをエコーた場合、コマンドの出力はgrep完全一致(-w)はテキストファイル内のファイルパスでは機能しません

grep -w run /home/rajesh/rootfs.layout 

Expected 
lrwxrwxrwx 1 root root 3 Aug 28 run 

Actual 
lrwxrwxrwx 1 root root 7 Aug 28 bin/run-parts 
lrwxrwxrwx 1 root root 3 Aug 28 run 
-rwxr-xr-x 1 root root 303 Aug 28 tests/aes/run.sh 
-rwxr-xr-x 1 root root 445 Aug 28 tests/auto_ui/run.sh 
-rwxr-xr-x 1 root root 320 Aug 28 tests/available_memory/run.sh 
-rwxr-xr-x 1 root root 308 Aug 28 tests/fonts/run.sh 
-rwxr-xr-x 1 root root 309 Aug 28 tests/html_config_page/run.sh 
-rwxr-xr-x 1 root root 361 Aug 28 tests/ipc/run.sh 
-rwxr-xr-x 1 root root 304 Aug 28 tests/JSON/run.sh 
-rwxr-xr-x 1 root root 303 Aug 28 tests/log4cplus_cpp/run.sh 
-rwxr-xr-x 1 root root 301 Aug 28 tests/log4cplus_c/run.sh 
-rwxr-xr-x 1 root root 751 Aug 28 tests/msm_basic/run.sh 
-rwxr-xr-x 1 root root 472 Aug 28 tests/res_man_dependency/run.sh 
-rwxr-xr-x 1 root root 465 Aug 28 tests/res_man_ipc/run.sh 
-rwxr-xr-x 1 root root 789 Aug 28 tests/res_man_multi_process/run.sh 
-rwxr-xr-x 1 root root 469 Aug 28 tests/res_man_private_client/run.sh 
-rwxr-xr-x 1 root root 492 Aug 28 tests/res_man_public_client/run.sh 
-rwxr-xr-x 1 root root 311 Aug 28 tests/virt_mem_config/run.sh 
lrwxrwxrwx 1 root root 6 Aug 28 var/run] 

以下のようになります。私が試したトリックは白を追加することです文字列検索に

pcline=`grep -w "$file1" $file2` # grep for file1 in file2 contents 

を行うシェルスクリプトで

ラインスペースは、私の入力ファイルで保証されていますが、これはコンソールでは動作しますが、変数に割り当てられている場合は動作しません。

grep " tests/aes/run.sh" /home/rajesh/rootfs.layout 

ラインスクリプト

pcline=`grep \"" $file1"\" $file2`  # grep for file1 in file2 contents 

で私は、このスクリプトではすべてのエラーを犯した場合は私に知らせてください。

+0

なぜ予期しない結果になるのですか?単語は英数字以外の文字で区切られます。だから、 'grep -w run ...'は例えば 'foo.run.bar'の行にマッチします。 'pcline = \' grep "$ file1" $ file2 \ ''をエスケープした引用符なしで試しましたか? – lurker

+0

@mbratch、ごめんなさい=> pcline = 'grep" $ filename "$ pc_layout' – rajeshk

+0

面白いです。私はあなたのシナリオの中にあなたの投稿には見えない何かがあると思います。私がテストケースを実行したときには私にとってはうまくいったが、すでに解決策を受けているように見えます。クール。 – lurker

答えて

1

あなたはこのようegrepを使用することができます。そして、上記のコマンド文字列runがライン開始またはスペースが先行し、スペースまたは行末が続くと一致します

egrep "(^|)$file1(|$)" "$file2" 

file1="run"場合。

+0

2つを除くすべてのファイルで正常に動作しましたが、私にとっては奇妙なファイルのように見えます。 1)lrwxrwxrwx 1 root root 17 8月28日usr/bin/[ 2)lrwxrwxrwx 1 root root 17 8月28日usr/bin/[ – rajeshk

+0

結果は次のようなものです:egrep:Unmatched [または[^ – rajeshk

+0

実際には '/ usr/bin'のファイル名です。私はあなたに数分で回避策を提供する方法を見ていきます。 – anubhava

関連する問題