Grep or Sed


 
Thread Tools Search this Thread
Top Forums UNIX for Dummies Questions & Answers Grep or Sed
# 1  
Old 11-12-2007
Grep or Sed

Hi All,
I have created a bourne script that basically wants to split a file up in to different parts. I have this working if the file has all the information on different lines but if it doesn't then it doesn't work.
i.e.
If this is the file
hello
12345
good bye
6789
I could grep all the letters and out and put them in a file as the same with the numbers.
But if they were all on the same line when i use grep it copies the whole line.
i.e.
hello 12345 good bye 6789

So when i do grep '[a-z*]' file > letters
it sends the whole line.
I thought i could do like a sed command that substitutes everything except letters to nothing leaving just the letters then save that to a file.
i.e
sed 's/[a-z]// file > numbers

I hope that makes sense. What i'm trying to say is which is the best way to pull out specific text from a file without getting the whole line??

Thanks
Jason
# 2  
Old 11-13-2007
to pull out lines that contain numbers, you may use:
Code:
grep -v '[a-z*]' somefile > num_file

similarly, to pull out lines containing alphabets, use:
Code:
grep -v '[0-9*]' somefile > letters_file

but in these cases, if a line contains both numbers and alphabets, it is left out. if you want to extract numeric or alphabetic part from such lines, then this approach is not good. you need to use something else then (grep alone can't help)
# 3  
Old 11-13-2007
As you have seen, "grep" is a tool for identifying whole lines. You, however, need to identify words.

A cheap way to do this is to put each word on its own line before using grep:

Code:
tr ' '  '\n' somefile | grep '^[[:alpha:]]'

But then all your data ends up on individual lines. If you needed each line intact (minus the unwanted data of course) then your sed solution would be better.

Last edited by gus2000; 11-13-2007 at 02:15 AM..
# 4  
Old 11-13-2007
Quote:
Originally Posted by jazz8146
I thought i could do like a sed command that substitutes everything except letters to nothing leaving just the letters then save that to a file.
i.e
sed 's/[a-z]// file > numbers
If this is what you really want to do (see the points Yogesh and gus have raised) you can do that. In fact you have almost already done it, there is just a minor detail missing:

s/something/other/

will change only the first occurrence of "something" in every line to "other". If you want to change any occurrence you have to use the "global"-operator:

s/something/other/g

Hence your script would work this way:

sed 's/[a-z]//g' file > numbers

This will replace every (smallcap) character with "nothing", effectively deleting it. If you want to delete *every* character use: "[a-zA-Z]" or, better, "[^0-9.+-]". The "^" will invert the character mask, meaning "everything NOT mentioned here". The given expression will mean "everything, save for numbers 0-9, literal points *) and pluses and minuses **)".

So, your script should read:

sed 's/[^0-9.+-]//g' file > numbers

*) if you could have decimal numbers
**) if you could have signs

bakunin
# 5  
Old 11-13-2007
Thanks a lot for the answers they really helped and was easy to understand. What about if the file had dates, money and text? As in if you wanted to extract them three seperately, but all the information was on the same line? Would i have to take the approach of putting one a new line after every word?
# 6  
Old 11-13-2007
Quote:
Originally Posted by gus2000
As you have seen, "grep" is a tool for identifying whole lines. You, however, need to identify words.

A cheap way to do this is to put each word on its own line before using grep:

Code:
tr ' '  '\n' somefile | grep '^[[:alpha:]]'

But then all your data ends up on individual lines. If you needed each line intact (minus the unwanted data of course) then your sed solution would be better.
I used this command and the result was blank. Here is the data i am using from a file.
13/11/07 $50 new shoes
Here is the command i have used
tr ' ' '\n' < a file | grep '^[[:alpha:]]' > temp
tr

Last edited by jazz8146; 11-13-2007 at 08:32 AM.. Reason: Solved previous issue
 
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

sed and awk usage to grep a pattern 1 and with reference to this grep a pattern 2 and pattern 3

Hi , I have a file where i have modifed certain things compared to original file . The difference of the original file and modified file is as follows. # diff mir_lex.c.modified mir_lex.c.orig 3209c3209 < if(yy_current_buffer -> yy_is_our_buffer == 0) { --- >... (5 Replies)
Discussion started by: breezevinay
5 Replies

2. UNIX for Dummies Questions & Answers

Help with sed/grep

Hello Everyone! I'm kind of new to parsing and would like extract a partial part of my nmap scan output so I can convert it to csv/excel: My current file has two types of lines like this: Nmap scan report for dns1 (1.1.1.1) Nmap scan report for dns2 (2.2.2.2) Nmap scan report for 3.3.3.3 ... (3 Replies)
Discussion started by: SarahS
3 Replies

3. Shell Programming and Scripting

Help with sed/grep

Hi, I have a file with reoccurring patterns and I want extract the 3rd line after the match, then delete another pattern from that third line. For example the file is in the following format: Hello Name: Abc Number: 123 Hello Name: FQE Number: 543 This occurs more than 100... (4 Replies)
Discussion started by: wsn
4 Replies

4. Linux

sed and grep

I am stranded with a problem. Please solve. How will you remove blank lines from a file using sed and grep? ( blank line contains nothing or only white spaces). I run the below commands of sed and grep but grep isn't giving output as desired. Why? sed '/^*$/d' blank grep -v "^*$" blank... (3 Replies)
Discussion started by: ravisingh
3 Replies

5. Shell Programming and Scripting

sed/tr/grep help

So I have a html file with a bunch of words inside tags and I need to extract just the words, and I'm not sure exactly what the best way to do this is. The format is as follows: <tr> <td>word 1</td> <td>word 2</td> </tr> And all I want to extract is the 'word 2'. First I tried... (3 Replies)
Discussion started by: flightskoo
3 Replies

6. Shell Programming and Scripting

help with SED + GREP

HI all, i have a line in a file it contains Code: one;two_1_10;two_2_10;two_3_10;three~ now i need to get the output as Code: one;two_1_abc_10;two_2_abc_10;two_3_abc_10;three~ ( 1 should be replaced with 1_abc for two__abc_10 , and one more thing the number of occurances of... (6 Replies)
Discussion started by: 2001.arun
6 Replies

7. UNIX for Dummies Questions & Answers

sed or grep?

hello everybody! I have a html file which is not properly formatted meaning that the whole content is in one line. I want to to cut out certain parts of that file. Those parts are between ' #" ' and ' " ' and always start with ' sec_ ' and after the ' sec_ ' any number of characters and ' _... (2 Replies)
Discussion started by: MastaFue
2 Replies

8. Shell Programming and Scripting

using sed to grep

I have a file that contains many instances of double dollar signs. I want to use sed to get the first occurrence. for example, given the following data. #Beginning of file AB 34 $$ AB $$ AB 98 $$ I only want to pull out: AB 34 $$ (1 Reply)
Discussion started by: wxornot
1 Replies

9. UNIX for Dummies Questions & Answers

grep sed

OK, I am trying to become more familiar with grep and sed. I have a file that is storing some records. I am allowing a user to search for a keyword in the file with this: grep -i "$keyword" testFile|sed -n -e 's/^/\ /' -e 's/:/\ /gp' ... (15 Replies)
Discussion started by: ericelysia
15 Replies

10. UNIX for Dummies Questions & Answers

SED and it used with | and grep

I am really lost I don't know what this line does. Please help I'm very lost. Thanks in advance. cat CPROGRAMS.c |sed 's// /g'|tr ' ' '\012' |grep '' |sed 's/^*/ /' |grep '($'|sort -u|tr -d "("` (4 Replies)
Discussion started by: Lem2003
4 Replies
Login or Register to Ask a Question