Need Help with sed


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Need Help with sed
# 1  
Old 10-10-2013
Need Help with sed

Hello Folks,

I use this sed line to search and print a specific string in multiple lines with a bunch of strings on each:
Code:
sed -n '/[A-Z][0-9]\{5,\}/s/^.*\([A-Z][0-9]\{5,\}\).*$/\1/p' job_details.txt

-> Output Sample:
Code:
B08619

However, I'm having a hard time printing multiple patterns from a line.

Cat job_details.txt
Code:
86,blah blah blah, B08619,drive index 10, blah blah blah...

Desired Output: (including comma)
Code:
86, B08619, drive index 10

Please help!

Thanks in advance.
59626
Moderator's Comments:
Mod Comment Please use CODE tags (not HTML tags) when posting sample code and sample output text. Also, use CODE tags when posting sample input.

Last edited by Don Cragun; 10-10-2013 at 06:39 AM.. Reason: Fix tags.
# 2  
Old 10-10-2013
Quote:
Originally Posted by 59626
Hello Folks,

I use this sed line to search and print a specific string in multiple lines with a bunch of strings on each:
Code:
sed -n '/[A-Z][0-9]\{5,\}/s/^.*\([A-Z][0-9]\{5,\}\).*$/\1/p' job_details.txt -> Output Sample: B08619

However, I'm having a hard time printing multiple patterns from a line.

Cat job_details.txt
Code:
86,blah blah blah, B08619,drive index 10, blah blah blah...

Desired Output: (including comma)
Code:
86, B08619, drive index 10

Please help!

Thanks in advance.
59626
I don't understand what you're trying to do.
Your current input sample contains one occurrence of an upper case letter followed by five or more decimal digits and discards everything before and after that pattern. It doesn't attempt to treat commas as special.

Your input file has five comma separated fields. Your output discards the 2nd and 5th fields, inserts a space in the 4th field that wasn't present in the input, and preserves a space in the 3rd field that your sed command seems to want to discard.

Please CLEARLY explain what you are trying to do and be sure that the sample output you provide matches the sample input you provide when the transformation rules you supply are applied.
This User Gave Thanks to Don Cragun For This Post:
# 3  
Old 10-10-2013
Quote:
Originally Posted by Don Cragun
I don't understand what you're trying to do.
Your current input sample contains one occurrence of an upper case letter followed by five or more decimal digits and discards everything before and after that pattern. It doesn't attempt to treat commas as special.

Your input file has five comma separated fields. Your output discards the 2nd and 5th fields, inserts a space in the 4th field that wasn't present in the input, and preserves a space in the 3rd field that your sed command seems to want to discard.

Please CLEARLY explain what you are trying to do and be sure that the sample output you provide matches the sample input you provide when the transformation rules you supply are applied.
Hi Don, thanks for editing my post and the reminders. I read the instructions before I posted but didn't realize I hit <> - for HMTL tags instead of the code button. Anyway, what I was trying to accomplish is search for multiple patterns in a line and print them out with comma as a separator, using sed command.

Code:
86,this,is,the,best,forum,for,newbies,B08619
86,2nd,line,B08620
86,missing,piece,of,my,backup,script,B08621

How can I edit my sed command to search the lines above to get the following output: (getting rid of all characters but the patterns and then add a comma)
Code:
86,B08619
86,B08620
86,B08621

# 4  
Old 10-10-2013
If you only want to retain certain field on a coma separated file you can do it several ways.
The last sed statement below assume you exactly have 5 fields (coma separated)
Some ways to do it ...

Code:
$ cat tst
86,blah blah blah, B08619,drive index 10, blah blah blah
$ cut -d, -f1,3,4 tst
86, B08619,drive index 10
$ awk -F, '{print $1,$3,$4}' OFS=, tst
86, B08619,drive index 10
$ sed 's/\([^,]*,\)[^,]*,\([^,]*,[^,]*\),.*$/\1\2/' tst
86, B08619,drive index 10
$ sed 's/,[^,]*//;s/,[^,]*$//' tst
86, B08619,drive index 10

Include what you want to retain in \( \) and perform back reference to it when reconstructing the output with the \1 \2 ....
example :
Code:
$ cat tst
86,this,is,the,best,forum,for,newbies,B08619
86,2nd,line,B08620
86,missing,piece,of,my,backup,script,B08621
$ sed 's/\(86\).*\(B[0-9]*\)$/\1,\2/' tst
86,B08619
86,B08620
86,B08621
$ sed 's/\(86\).*\(B[0-9]*\)$/\2,\1/' tst
B08619,86
B08620,86
B08621,86
$


Last edited by ctsgnb; 10-10-2013 at 07:11 AM..
# 5  
Old 10-10-2013
Giving real data or as close to real data does help us lot of helping your.
Your example in post #3, can easily be solved like this.
And sed are not always the best tool for all job Smilie
Code:
awk -F, '{print $1 FS $NF}' file
86,B08619
86,B08620
86,B08621

Print the first and last field.
# 6  
Old 10-10-2013
Quote:
Originally Posted by 59626
Hi Don, thanks for editing my post and the reminders. I read the instructions before I posted but didn't realize I hit <> - for HMTL tags instead of the code button. Anyway, what I was trying to accomplish is search for multiple patterns in a line and print them out with comma as a separator, using sed command.

Code:
86,this,is,the,best,forum,for,newbies,B08619
86,2nd,line,B08620
86,missing,piece,of,my,backup,script,B08621

How can I edit my sed command to search the lines above to get the following output: (getting rid of all characters but the patterns and then add a comma)
Code:
86,B08619
86,B08620
86,B08621

You still haven't explained what patterns you're trying to preserve. With the above sample input and output, the following command (which completely ignores any pattern that might match the text that will be preserved) does what you show that you want:
Code:
sed 's/,.*,/,/' job_details.txt

Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

I am learning regular expression in sed,Please help me understand the use curly bracket in sed,

I am learning SED and just following the shell scripting book, i have trouble understanding the grep and sed statement, Question : 1 __________ /opt/oracle/work/antony>cat teledir.txt jai sharma 25853670 chanchal singhvi 9831545629 anil aggarwal 9830263298 shyam saksena 23217847 lalit... (7 Replies)
Discussion started by: Antony Ankrose
7 Replies

2. Shell Programming and Scripting

sed and awk giving error ./sample.sh: line 13: sed: command not found

Hi, I am running a script sample.sh in bash environment .In the script i am using sed and awk commands which when executed individually from terminal they are getting executed normally but when i give these sed and awk commands in the script it is giving the below errors :- ./sample.sh: line... (12 Replies)
Discussion started by: satishmallidi
12 Replies

3. Shell Programming and Scripting

sed inside sed for replacing string

My need is : Want to change docBase="/something/something/something" to docBase="/only/this/path/for/all/files" I have some (about 250 files)xml files. In FileOne it contains <Context path="/PPP" displayName="PPP" docBase="/home/me/documents" reloadable="true" crossContext="true">... (1 Reply)
Discussion started by: linuxadmin
1 Replies

4. Shell Programming and Scripting

How to use sed to replace the a string in the same file using sed?

How do i replace a string using sed into the same file without creating a intermediate file? (7 Replies)
Discussion started by: gomes1333
7 Replies

5. UNIX for Dummies Questions & Answers

SED: Can't Repeat Search Character in SED Output

I'm not sure if the problem I'm seeing is an artifact of sed or simply a beginner's mistake. Here's the problem: I want to add a zero-width space following each underscore between XML tags. For example, if I had the following xml: <MY_BIG_TAG>This_is_a_test</MY_BIG_TAG> It should look like... (8 Replies)
Discussion started by: rhetoric101
8 Replies

6. Shell Programming and Scripting

deleting text records with sed (sed paragraphs)

Hi all, First off, Thank you all for the knowledge I have gleaned from this site! Deleting Records from a text file... sed paragraphs The following code works nearly perfect, however each time it is run on the log file it adds a newline at the head of the file, run it 5 times, it'll have 5... (1 Reply)
Discussion started by: Festus Hagen
1 Replies

7. Shell Programming and Scripting

sed has zeored my files. Help me with sed please

i made a script to update a lot of xml files. to save me some time. Ran it and it replaced all the the files with a 0kb file. The problem i was having is that I am using sed to change xml node <doc_root>. The problem with this is it has a / in the closing xml tag and the stuff inside will also have... (4 Replies)
Discussion started by: timgolding
4 Replies

8. Shell Programming and Scripting

sed over writes my original file (using sed to remove leading spaces)

Hello and thx for reading this I'm using sed to remove only the leading spaces in a file bash-280R# cat foofile some text some text some text some text some text bash-280R# bash-280R# sed 's/^ *//' foofile > foofile.use bash-280R# cat foofile.use some text some text some text... (6 Replies)
Discussion started by: laser
6 Replies

9. Shell Programming and Scripting

Issue with a sed one liner variant - sed 's/ ; /|/g' $TMP1 > $TMP

Execution of the following segment is giving the error - Script extract:- OUT=$DATADIR/sol_rsult_orphn.bcp TMP1=${OUT}_tmp1 TMP=${OUT}_tmp ( isql -w 400 $dbConnect_OPR <<EOF select convert(char(10), s.lead_id) +'|' + s.pho_loc_type, ";", s.sol_rsult_cmnt, ";", +'|'+ s.del_ind... (3 Replies)
Discussion started by: kzmatam
3 Replies

10. Shell Programming and Scripting

Sed Question 1. (Don't quite know how to use sed! Thanks)

Write a sed script to extract the year, rank, and stock for the most recent 10 years available in the file top10_mktval.csv, and output in the following format: ------------------------------ YEAR |RANK| STOCK ------------------------------ 2007 | 1 | Exxon... (1 Reply)
Discussion started by: beibeiatNY
1 Replies
Login or Register to Ask a Question