sed with multiple regexp


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting sed with multiple regexp
# 1  
Old 03-07-2012
sed with multiple regexp

Dealing with Linux servers

script would be in korn or bash shell syntax

file is /etc/fstab

I want to insert something if regex is matched to all matched lines in the /etc/fstab file and print out entire /etc/fstab file with the changes

example
Code:
58.228.111.111:/my/file/system /my/file/system nfs rw,soft,bg,intr,vers=3 0 0

if uncommented line starts with 58. "^58\."
and line doesn't contain FOO
and line doesn't contain BOO
and if the line meets these requirements, insert the word BAR in a certain location

finished line would look like this
Code:
58.228.111.111:/BAR/my/file/system /my/file/system nfs rw,soft,bg,intr,vers=3 0 0

one line that comes close is this
Code:
sed -e '/THIS/!s/\:\//\:\/BAR\//g'

This of course is my first attempt which doesn't work but it does kinda show
you what I am looking for
Code:
grep "^58\." /etc/fstab |egrep -v "FOO|BOO" |sed -e "s/\:\//\:\/BAR\//g"

so my question is 2 part

1. how can I change a line like this
Code:
58.228.111.111:/my/file/system /my/file/system nfs rw,soft,bg,intr,vers=3 0 0

to this
Code:
58.228.111.111:/BAR/my/file/system /my/file/system nfs rw,soft,bg,intr,vers=3 0 0

2. I don't understand how this is working
Code:
sed -e '/THIS/!s/\:\//\:\/BAR\//g'

I understand that "!s" section is saying don't look at lines with THIS in it

in general this is using a SED command, using a regex to throw out 2 seperate expressions, and include one regex.

Code:
sed '/^58\./,/FOO/!s//BAR/g' /etc/fstab

close, but no cigar

Last edited by Franklin52; 03-08-2012 at 03:37 AM.. Reason: Please use code tags for code and data samples, thank you
# 2  
Old 03-07-2012
If your sed supports extended regex (-r) then this should do it:

Code:
sed -r '/(FOO|BAR)/!s_:/_:/BAR/_' /etc/fstab


Note: this will only print what would be done to edit in-place use -i or --in-place option.

Last edited by Chubler_XL; 03-07-2012 at 07:50 PM..
# 3  
Old 03-07-2012
getting closer. learned how to combine regexp
Code:
cat /etc/fstab |sed -e '/FOO\|BOO/!s/\:\//\:\/BAR\//g'


Last edited by Franklin52; 03-08-2012 at 03:37 AM.. Reason: Please use code tags for code and data samples, thank you
# 4  
Old 03-07-2012
Try this (sorry about previous answer missed the begins with "58" bit):

Code:
 sed -r '/^58([^(FOO|BAR)]*)$/s_:/_:/BAR/_' /etc/fstab

# 5  
Old 03-07-2012
Quote:
Originally Posted by Chubler_XL
Try this (sorry about previous answer missed the begins with "58" bit):

Code:
 sed -r '/^58([^(FOO|BAR)]*)$/s_:/_:/BAR/_' /etc/fstab

Not to nit pick too much, the first BAR should be BOO
Code:
 sed -r '/^58([^(FOO|BOO)]*)$/s_:/_:/BAR/_' /etc/fstab

This User Gave Thanks to agama For This Post:
# 6  
Old 03-07-2012
No the devil is in the detail, thanks. Funny, sometimes I read what I expect to see.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

sed with regexp in Linux

OFF 00280456 - 2014|1|2020_STATUS|GROUP_NAME|SUBGROUP_NAME|CLASS_NAME|GROUP_ID|SUBGROUP_ID I have above header in file. I need to replace 2020_STATUS with STATUS. 2020_STATUS is not always same but the column name will have STATUS all of the time. For instance column name might be 2019_STATUS... (1 Reply)
Discussion started by: jmadhams
1 Replies

2. Shell Programming and Scripting

sed regexp teaser

G'day, Here's a teaser for a sed guru, which I surely am not one, as even my basic sed skills are rusted from years of not practising ... lol Ok ... we have a string of digits such as: 632413741610252847552619172459483022433027602515212950543016701812771409213148672112 we want it split... (9 Replies)
Discussion started by: naderra
9 Replies

3. Shell Programming and Scripting

Need help with sed and regexp

Hi everyone, I would really appreciate any help I could get on the following topic. I am not very familiar with reg expressions nor with sed, I just know the basic uses. What I am trying to do is the following: I have a huge text file where I would like to replace all occurnces of a certain... (13 Replies)
Discussion started by: Boxtuna
13 Replies

4. Shell Programming and Scripting

Help with Regexp replace in vim/sed

Hi! I have a file with multiple lines following this format: <a href="xxx.aaa_bbb_ccc.yyy">xxx.aaa_bbb_ccc.yyy</a> The goal is to replace the title (not modifying the href) so the new lines looks like this: <a href="xxx.aaa_bbb_ccc.yyy">Aaa bbb ccc</a> The number of underscores in the... (2 Replies)
Discussion started by: ericjohansson
2 Replies

5. UNIX for Dummies Questions & Answers

sed before and after regexp

Dear all i have the code which print 1 line of context before and after regexp, with line number sed -n -e '/regexp/{=;x;1!p;g;$!N;p;D;}' -e h the code work well but any one can tell me what each letter mean {=;x;1!p;g;$!N;p;D;} also how i can print 2 line before and onle line after ... (2 Replies)
Discussion started by: soly
2 Replies

6. Shell Programming and Scripting

sed regexp

Hi, I am not that good with reg exp and sed. But I was just looking at something the other day and came across a situation. When I ran the below command: echo "123 word" | sed 's/*/(&)/' the op was: (123) word But when I ran: echo "123 word" | sed 's/*/(&)/g' the o/p was: (123)... (4 Replies)
Discussion started by: King Nothing
4 Replies

7. Shell Programming and Scripting

Help regarding behavior sed regexp query

Hi all, I have one question regarding sed regexp (or any regexp in general), I have some path like this C:/Abc/def/ghi/jkl in a file file1 Now if i use following code cat file1 | sed 's#\(.*\)/.*#\1#' Now it give me following output C:/Abc/def/ghi, which is fine But i just... (2 Replies)
Discussion started by: sarbjit
2 Replies

8. Shell Programming and Scripting

Regexp and sed problem

Basically it should identify what ever is in between /*< >*/ (tags) and replace dbname ending with (.) with the words in between the tags i.e. DELETE FROM /*<workDB>*/epd_test./*<multi>*//*<version>*/epd_tbl1 ALL; into DELETE FROM... (4 Replies)
Discussion started by: sol_nov
4 Replies

9. Shell Programming and Scripting

regexp with sed again!!!

please help: I want to add 1 space between string and numbers: input file: abcd12345 output file: abcd 1234 The following sed command does not work: sed 's/\(+\)\(+\)/\1 \2/' file Any ideas, please Andy (2 Replies)
Discussion started by: andy2000
2 Replies

10. UNIX for Dummies Questions & Answers

GnuWin32 sed 4.1.4 regexp matching

I am using GnuWin32 sed and am having trouble with the regexp - i.e., they don't behave the same way as in UNIX (POSIX and and all that). I have a stream of data, e.g.: 11111'222?'22'33?'333'44444'55555' I want to insert a \n after those apostrophes that are *not* preceded by a ?. ... (2 Replies)
Discussion started by: Simerian
2 Replies
Login or Register to Ask a Question