LinuxQuestions.org
Review your favorite Linux distribution.
Go Back   LinuxQuestions.org > Forums > Non-*NIX Forums > General
User Name
Password
General This forum is for non-technical general discussion which can include both Linux and non-Linux topics. Have fun!

Notices



Reply
 
Search this Thread
Old 08-27-2007, 03:54 AM   #1
guarriman
Member
 
Registered: Nov 2004
Posts: 101

Rep: Reputation: 15
Shell script: how to find a file containing a string


Hi.

I'd like to find all files within a directory containing:
Code:
<?
("<?" and a line break)

I tried it by using:
Code:
find . -name "*.php" | grep -lir "<?\n"
but it doesn't work. Any suggestion?

Thank you very much.
 
Old 08-27-2007, 04:25 AM   #2
b0uncer
Guru
 
Registered: Aug 2003
Distribution: CentOS, OS X
Posts: 5,131

Rep: Reputation: Disabled
Maybe
Code:
grep -H searchstring
which means "with filename", so it prints the matching line when found, and the filename where it was found. Check out

unixhelp.ed.ac.uk/CGI/man-cgi?grep

for grep manpage. You can add some special chars to tell grep that the searchstring is in the end of the line or in the beginning of the line, so maybe adding both tells grep it's the only thing in the line. Note that if the searchstring contains special characters you'll have to escape them so they're not accidentally used by your shell in a special way.

With the use of sed, for example (or awk language), you can then turn the "answer lines" into the form you want to use. Check sed man page also.
 
Old 08-27-2007, 04:39 AM   #3
colucix
Moderator
 
Registered: Sep 2003
Location: Bologna
Distribution: CentOS 6.5 OpenSuSE 12.3
Posts: 10,509

Rep: Reputation: 1957Reputation: 1957Reputation: 1957Reputation: 1957Reputation: 1957Reputation: 1957Reputation: 1957Reputation: 1957Reputation: 1957Reputation: 1957Reputation: 1957
There are some issues in the command line you have posted:
1. piping the result from the find command directly into grep, does not look for string inside files, but only in the list of files, that is in their filenames. To actually issue a grep you may use xargs, as in
Code:
find . -name "*.php" | xargs grep <options> <pattern>
or the -exec action of the find command, as in
Code:
find . -name "*.php" -exec grep <options> <pattern> '{}' \;
2. The option -r is useless in this context, because the find command itself do recursion
3. The option -i is also useless because you are looking for a pattern made of symbols
4. Take in mind that option -l does not return the lines matching the pattern, but only the name of the first file encountered, whose text matches the pattern. If you want to force grep to print the filename before the matching lines you may consider option -H.
So, the command you're looking for maybe is
Code:
find . -name "*.php" | xargs grep -H \<\?$
where the $ sign means "at the end of line". For details look carefully at man xargs, man find, man grep

Edit: sorry for redundancy... I didn't see the answer from bOuncer while posting.

Last edited by colucix; 08-27-2007 at 04:41 AM.
 
  


Reply


Thread Tools Search this Thread
Search this Thread:

Advanced Search

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is Off
HTML code is Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Shell script: Find "\n\t..." to replace a string in a file michael24h7d Programming 8 05-11-2007 04:07 AM
String Manipulations in Shell Script ramakula@gmail.com Programming 15 04-19-2007 11:40 AM
How to find out whether a process is dead or alive from within a shell script file walwali Linux - Software 2 12-24-2005 02:39 PM
Shell Script - String Replacement revof11 Programming 7 11-29-2005 07:38 AM
Shell script to find a particular string Prasun1 Linux - General 5 08-30-2005 10:23 AM


All times are GMT -5. The time now is 11:25 PM.

Main Menu
Advertisement
My LQ
Write for LQ
LinuxQuestions.org is looking for people interested in writing Editorials, Articles, Reviews, and more. If you'd like to contribute content, let us know.
Main Menu
Syndicate
RSS1  Latest Threads
RSS1  LQ News
Twitter: @linuxquestions
identi.ca: @linuxquestions
Facebook: linuxquestions Google+: linuxquestions
Open Source Consulting | Domain Registration