简体   繁体   中英

grep exact word match (-w) does not work with file paths in a text file

Im trying to grep for a filename with fullpath in a file which contains something like 'ls -l' output, but it fails to match it correctly.

Line in the shell script which does the string search

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

if i echo the command, the output of command looks like below

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]

The trick i tried is to add a white space, which is guaranteed in my input file, this works in console, but not when it is assigned to a variable.

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

Line in the script

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

Please let me know if i have committed any errors in this script.

You can use egrep like this:

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

If file1="run" then above command will match string run preceded by line start or space and followed by space or line end.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM