Grep -l Problem


 
Thread Tools Search this Thread
Top Forums UNIX for Dummies Questions & Answers Grep -l Problem
# 8  
Old 06-05-2010
Hi.

Command xargs was designed to solve this kind of problem. Here's an example that looks for the string "hit" in a generated list of *.sql files, as discovered by command find:
Code:
#!/usr/bin/env bash

# @(#) s1	Demonstrate avoidance of argument list too long: use xargs.

# Uncomment to run script as external user.
# export PATH="/usr/local/bin:/usr/bin:/bin"
# Infrastructure details, environment, commands for forum posts. 
set +o nounset
pe() { for i;do printf "%s" "$i";done; printf "\n"; }
pl() { pe;pe "-----" ;pe "$*"; }
LC_ALL=C ; LANG=C ; export LC_ALL LANG
pe ; pe "Environment: LC_ALL = $LC_ALL, LANG = $LANG"
pe "(Versions displayed with local utility \"version\")"
c=$( ps | grep $$ | awk '{print $NF}' )
version >/dev/null 2>&1 && s=$(_eat $0 $1) || s=""
[ "$c" = "$s" ] && p="$s" || p="$c"
version >/dev/null 2>&1 && version "=o" $p find xargs grep
set -o nounset

# Sample data files, using head & tail as a last resort.
pe
specimen *.sql \
|| { pe "(head/tail)"; head -n 5 data*; pe " ||"; tail -n 5 data*; }

pe
pe " Results:"
find . -name '*.sql' |
xargs grep -l "hit"

exit 0

producing:
Code:
% ./s1

Environment: LC_ALL = C, LANG = C
(Versions displayed with local utility "version")
OS, ker|rel, machine: Linux, 2.6.26-2-amd64, x86_64
Distribution        : Debian GNU/Linux 5.0 
GNU bash 3.2.39
find (GNU findutils) 4.4.0
xargs (GNU findutils) 4.4.0
GNU grep 2.5.3

Whole: 5:0:5 of 1 lines in file "t1.sql"
hit

Whole: 5:0:5 of 1 lines in file "t2.sql"
hit

Whole: 5:0:5 of 1 lines in file "t3.sql"
hit

Whole: 5:0:5 of 1 lines in file "t4.sql"
buzz! Thanks for playing.

Whole: 5:0:5 of 1 lines in file "t5.sql"
hit

 Results:
./t5.sql
./t1.sql
./t2.sql
./t3.sql

Note that file t4.sql is not listed because it does not contain string "hit" ... cheers, drl
# 9  
Old 06-05-2010
Yeah, the trick to getting around 'too many arguments' is to not use that many arguments! Not to keep trying "ls *", "for FILE in *", "for FILE in `ls *`", etc, etc, etc. Too many arguments means too many arguments. Shell globbing in general is often subject to that fundamental limitation, and has a related fundamental inefficiency for large lists as well -- it generates the entire list at once.

find works because it iterates through them and feeds them back to the shell one at a time.
# 10  
Old 06-07-2010
Thanks!!! Guys

Thanks!!! Guys ... its working .. Smilie
 
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Dummies Questions & Answers

sed Or Grep Problem OR Terminal Problem?

I don't know if you guys get this problem sometimes at Terminal but I had been having this problem since yesterday :( Maybe I overdid the Terminal. Even the codes that used to work doesn't work anymore. Here is what 's happening: * I wanted to remove lines containing digits so I used this... (25 Replies)
Discussion started by: Nexeu
25 Replies

2. Shell Programming and Scripting

Grep problem

Hello. I'm learning shell scripting right now and I'm trying simple scripts. I have a problem with the one below. The idea is to found the number of files containing asd in their name. Here's the code: #!/bin/sh pattern=asd total=0 for f in * do && continue if grep $pattern $f >... (3 Replies)
Discussion started by: EmZvr
3 Replies

3. Shell Programming and Scripting

grep problem

Hi everyone i am facing a strange problem in grep below is the code RC=0 grep $ERROR_MASK $LOG_FILE 2>&1 > /dev/null && RC=1 || RC=0 what does the above statment do i mean it search for error mask into log file and redirect the error to console null then what's the meaning of RC=1 ||... (2 Replies)
Discussion started by: aishsimplesweet
2 Replies

4. UNIX for Dummies Questions & Answers

problem with grep

Hi I am trying to grep a string in a directory which is having 5000 files. PA>> grep -iH 'linc.unisure_pr13n' * bash: /usr/bin/grep: Arg list too long I am getting the error. i also tried PA>> ls -ltr | grep -iH 'linc.unisure_pr13n' * but still i am getting the error Please Advice... (4 Replies)
Discussion started by: subhotech
4 Replies

5. Shell Programming and Scripting

problem with grep |

Hi, When i try this it is not executing either result or total, pls can any one help me in this. max=month_134.log grep result|total $max > log.txt In month_134.log, it should contain either result or total and then send it to log.txt.It should execute result or total in log.txt ... (3 Replies)
Discussion started by: NehaKrish
3 Replies

6. Homework & Coursework Questions

Grep problem

Changed Problem its a sed actually... Use and complete the template provided. The entire template must be completed. If you don't, your post may be deleted! 1. The problem statement, all variables and given/known data: Use a sed command to create an output file from the input file. The input... (2 Replies)
Discussion started by: skalidindi
2 Replies

7. Shell Programming and Scripting

GREP problem

I have a problem. Suppose I have a log named transport.log >> tp finished with return code: 203 meaning: wrong syntax in tp call .... tp finished with return code: 0 meaning: Everything ok. << What i want to do is to get the return code of the 1st one. So I would probably do:... (2 Replies)
Discussion started by: kdyzsa
2 Replies

8. UNIX for Dummies Questions & Answers

Grep problem

Hi there, this is a very simple question. When I do grep -c "PWD" filename, I get 5. This means the filename contains 5 lines of "PWD" occurence. I tried to assign to a variable. int= grep -c "PWD" filename When I typed echo $int The output: 5 I get an empty line space. Now I... (1 Reply)
Discussion started by: felixwhoals
1 Replies

9. Shell Programming and Scripting

Grep Problem

I have a large file that I am grepping to find a certain string. grep 'C:\Data\Directory\Test.txt' test.txt It can not find it even though I know it is in there . I know that there is a problem with the backslashes but I can't get it to work. I tried grep... (2 Replies)
Discussion started by: lesstjm
2 Replies

10. UNIX for Dummies Questions & Answers

grep problem

Hi I would like to know wheather there is anyway to pass a variable to grep argument like this grep "$myvar" $myfile i would put this in a function and then call this function by setting different values to myvar and myfile. is this possible at all. regards Hrishy (4 Replies)
Discussion started by: xiamin
4 Replies
Login or Register to Ask a Question