Sed Command and the "|"?


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Sed Command and the "|"?
# 1  
Old 08-16-2012
Sed Command and the "|"?

Hello All,

Does the sed "s/// command" have an equivalent to Perl's vertical pipe character "|", meaning 'OR'...


i.e. To say replace "a" or "b" with "m": (the pipe has a different function in sed... Does it have an 'OR' character?)
Code:
sed 's/(a|b)/m/g'

# This would work in perl (it would replace "a" -OR- "b" with "m")
perl -pe 's/(a|b)/m/g'

I read through the sed man pages and Googled ALL day long and couln't find anything remotley related to an 'OR' character...
Any help would be much appreciated...!


Thanks in Advance,
Matt
# 2  
Old 08-16-2012
( | ) are taken literally unless you escape them. 's/\(a\|b\)/m/g'
# 3  
Old 08-16-2012
According to the POSIX standard, the sed utility uses Basic Regular Expressions (BREs). BREs don't have an the "|" operator. Some, but not all, versions of sed have a -r (or --regexp-extended) option (as an extension to the standard) that causes sed to use Extended Regular Expressions (EREs) instead of BREs. Some other versions of sed have a -E option that serves the same purpose.

EREs do have the "|" operator and would work as you expect in your perl script. The awk utility also uses EREs when selecting lines to process as well as in the sub() and gsub() string functions.

Hope this helps.
# 4  
Old 08-17-2012
Hey Corona688, thanks for your reply.
I tried escaping the "|" but it didn't seem to change anything... Thanks though!


Hey Don Cragun, thanks for the reply...

I used the "-r" and it seems to be working perfectly.
Here's my command:
Code:
### In a bash script while reading a file...
while read line
 do

    # Matches the BOLD, UNDERLINE, and OFF Character Sequences --> (i.e. "^[[1m", "^[[4m", "^[[0m")
    echo "$line" | sed -r 's/\^\[\[(0|1|4)m//g'

    # This REGEX also works... It uses a range instead of "0|1|4"
    echo "$line" | sed -r 's/\^\[\[([0-9])m//g'

done < $myFile

Thanks for your suggestions!

Thanks Again,
Matt

---------- Post updated at 10:22 AM ---------- Previous update was at 10:05 AM ----------

This one also seems to work... And it's without the '-r' (it's an OLDER version of sed that doesn't have the "-r" option).
Code:
        # Basically the same thing as the one above except the range is NOT enclosed in parenthesis...
        echo "$line" | sed 's/\^\[\[[0-9]m//g'


Thanks,
Matt
This User Gave Thanks to mrm5102 For This Post:
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Dummies Questions & Answers

Using "mailx" command to read "to" and "cc" email addreses from input file

How to use "mailx" command to do e-mail reading the input file containing email address, where column 1 has name and column 2 containing “To” e-mail address and column 3 contains “cc” e-mail address to include with same email. Sample input file, email.txt Below is an sample code where... (2 Replies)
Discussion started by: asjaiswal
2 Replies

2. Shell Programming and Scripting

Awk,sed : change every 2nd field ":" to "|"

Hi Experts, I have a string with colon delimited, want 2nd colon to be changed to a pipe. data: 101:8:43:4:72:14:41:69:85:3:137:4:3:0:4:0:9:3:0:3:12:3: I am trying with sed, but can change only 1 occurance: echo "101:8:43:4:72:14:41:69:85:3:137:4:3:0:4:0:9:3:0:3:12:3:" | sed 's/:/|/2'... (5 Replies)
Discussion started by: rveri
5 Replies

3. Shell Programming and Scripting

sed returns error "sed: -e expression #1, char 18: unterminated `s' command"

Hello All, I have something like below LDC100/rel/prod/libinactrl.a LAA2000/rel/prod/libinactrl.a I want to remove till first forward slash that is outputshould be as below rel/prod/libinactrl.a rel/prod/libinactrl.a How can I do that ??? (8 Replies)
Discussion started by: anand.shah
8 Replies

4. Post Here to Contact Site Administrators and Moderators

Suggestion: adding two new groups "sed" and "awk"

Majority of the questions are pertaining file/string parsing w.r.t sed or awk It would be nice to have these two as their own sub category under shell-programming-scripting which can avoid lot of duplicate posts. (1 Reply)
Discussion started by: jville
1 Replies

5. Shell Programming and Scripting

how to use "cut" or "awk" or "sed" to remove a string

logs: "/home/abc/public_html/index.php" "/home/abc/public_html/index.php" "/home/xyz/public_html/index.php" "/home/xyz/public_html/index.php" "/home/xyz/public_html/index.php" how to use "cut" or "awk" or "sed" to get the following result: abc abc xyz xyz xyz (8 Replies)
Discussion started by: timmywong
8 Replies

6. Shell Programming and Scripting

Using sed to find text between a "string " and character ","

Hello everyone Sorry I have to add another sed question. I am searching a log file and need only the first 2 occurances of text which comes after (note the space) "string " and before a ",". I have tried sed -n 's/.*string \(*\),.*/\1/p' filewith some, but limited success. This gives out all... (10 Replies)
Discussion started by: haggismn
10 Replies

7. UNIX for Dummies Questions & Answers

Unix "look" Command "File too large" Error Message

I am trying to find lines in a text file larger than 3 Gb that start with a given string. My command looks like this: $ look "string" "/home/patrick/filename.txt" However, this gives me the following message: "look: /home/patrick/filename.txt: File too large" So, I have two... (14 Replies)
Discussion started by: shishong
14 Replies

8. Shell Programming and Scripting

awk command to replace ";" with "|" and ""|" at diferent places in line of file

Hi, I have line in input file as below: 3G_CENTRAL;INDONESIA_(M)_TELKOMSEL;SPECIAL_WORLD_GRP_7_FA_2_TELKOMSEL My expected output for line in the file must be : "1-Radon1-cMOC_deg"|"LDIndex"|"3G_CENTRAL|INDONESIA_(M)_TELKOMSEL"|LAST|"SPECIAL_WORLD_GRP_7_FA_2_TELKOMSEL" Can someone... (7 Replies)
Discussion started by: shis100
7 Replies

9. Shell Programming and Scripting

Simplify Bash Script Using "sed" Or "awk"

Input file: 2 aux003.net3.com error12 6 awn0117.net1.com error13 84 aux008 error14 29 aux001.ha.ux.isd.com error12 209 aux002.vm.ux.isd.com error34 21 alx0027.vm.net2.com error12 227 dux001.net5.com error123 22 us008.dot.net2.com error121 13 us009.net2.com error129Expected Output: 2... (4 Replies)
Discussion started by: sQew
4 Replies

10. Shell Programming and Scripting

cat $como_file | awk /^~/'{print $1","$2","$3","$4}' | sed -e 's/~//g'

hi All, cat file_name | awk /^~/'{print $1","$2","$3","$4}' | sed -e 's/~//g' Can this be done by using sed or awk alone (4 Replies)
Discussion started by: harshakusam
4 Replies
Login or Register to Ask a Question