2013-08-28 15 views
5

'ls -l' çıktısı gibi bir şey içeren bir dosyada fullpath ile bir dosya adı için grep çalışıyorum ama eşleşmiyor doğru şekilde.grep tam sözcük eşlemesi (-w) bir metin dosyasındaki dosya yolları ile çalışmaz

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] 

altında denedim hile beyaz eklemektir gibi ben komutunu yankı eğer string arama

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

yapar kabuk komut

Çizgi, komutun çıktısı görünüyor Giriş dosyamda garanti edilen alan, bu konsolda çalışır, ancak bir değişkene atandığında değil.

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

ben bu komut herhangi bir hata işledin varsa bana bildirin lütfen komut

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

Hattı.

+0

Bu neden beklenmedik bir sonuçtur? Bir kelime, alfasayısal olmayan bir karakterle sınırlanır. Yani 'grep -w run ...', örneğin 'foo.run.bar' ile bir çizgi ile eşleşir. Kaçırılan alıntılar olmadan pcline = \ 'grep" $ file1 "$ file2 \' yi denediniz mi? – lurker

+0

@mbratch, => pcline = 'grep" $ filename "ile çalışmak istemediğim için üzgünüm $ pc_layout' – rajeshk

+0

İlginç. Sanırım senaryonuzda mesajınızda görünmeyen başka bir şey var. Bir test davası yürüttüğümde benim için çalıştı, ama zaten bir çözüm almış gibi görünüyor. Güzel. – lurker

cevap

1

Böyle egrep kullanabilirsiniz: o zaman komuta yukarıdaki dize run hat başlangıç ​​veya boşluk öncesinde ve boşluk veya satır sonuna kadar takip maç olacak

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

file1="run" edin.

+0

iki hariç tüm dosyalar ile iyi çalıştı, ama bana garip dosyalara benziyorlar. 1) lrwxrwxrwx 1 kök kökü 17 Ağustos 28 usr/bin/[ 2) lrwxrwxrwx 1 kök kökü 17 Ağustos 28 usr/bin/[[ – rajeshk

+0

sonuç böyle egrep gibi bir şeydi: Eşleşmeyen [veya [^ – rajeshk

+0

Evet çünkü '' ' Aslında/usr/bin'deki bir dosya adı, size birkaç dakika içinde nasıl bir geçici çözüm sağlayabileceğimi göreceğim. Bu konuyla ilgili desteğiniz için – anubhava

İlgili konular