| Author |
Sed to match multiple patterns
|
|
| solaris9000@gmail.com 2005-11-25, 7:57 am |
| Hello
I have got a file called "filename" like this:
#
#
path1 something1
#
path2 something2
#
I'd like to append "flag" to each line beginning path1 and path2 so the
file becomes:
#
#
path1 something1 flag
#
path2 something2 flag
#
I'd like to use sed for this. So far I can only match one pattern at a
time in sed. eg
sed '/path1/ s/$/ flag/' filename
sed '/path2/ s/$/ flag/' filename
Is there anyway I can combine both patterns in one line?
eg sed '/pattern1/ && /pattern2/ s/$/flag/' filename - I know this
doesnt work.
Thanks in advance.
| |
| Thomas Maier-Komor 2005-11-25, 7:57 am |
| solaris9000@gmail.com wrote:
> Hello
>
> I have got a file called "filename" like this:
>
> #
> #
> path1 something1
> #
> path2 something2
> #
>
> I'd like to append "flag" to each line beginning path1 and path2 so the
> file becomes:
>
> #
> #
> path1 something1 flag
> #
> path2 something2 flag
> #
>
> I'd like to use sed for this. So far I can only match one pattern at a
> time in sed. eg
>
> sed '/path1/ s/$/ flag/' filename
> sed '/path2/ s/$/ flag/' filename
>
> Is there anyway I can combine both patterns in one line?
>
> eg sed '/pattern1/ && /pattern2/ s/$/flag/' filename - I know this
> doesnt work.
>
> Thanks in advance.
>
sed '/path[12]/ s/$/ flag/' filename
Tom
| |
| Thomas Maier-Komor 2005-11-25, 7:57 am |
| Thomas Maier-Komor wrote:
> solaris9000@gmail.com wrote:
>
>
>
> sed '/path[12]/ s/$/ flag/' filename
>
> Tom
sorry to reply to my own post, but I could have been a little bit more
verbose...
you cannot specify multiple patterns - you must specify the pattern as
a single regular expression.
HTH,
Tom
| |
| solaris9000@gmail.com 2005-11-25, 7:00 pm |
| Thanks. That seems to have done the trick.
| |
| Ralf Fassel 2005-11-25, 7:00 pm |
| * solaris9000@gmail.com
| eg sed '/pattern1/ && /pattern2/ s/$/flag/' filename - I know this
| doesnt work.
In your special case the [12] does the trick. If you need truly
separate patterns, use multiple -e options:
sed -e 's/pattern1/replacement2/' -e 's/pattern2/replacement2/'
R'
| |
| clayne 2005-11-26, 3:58 am |
| Tom,
There is actually a semi-undocumented use of sed where you can also \
out extended regular expressions (even Solaris' installed-version of
sed supports it).
e.g.:
(sed acts like it doesn't know ex-regex):
$ (echo cat; echo dog; echo bird) | sed -e 's/(cat|dog)/rain/g'
cat
dog
bird
(now with backslash escaping):
$ (echo cat; echo dog; echo bird) | sed -e 's/\(cat\|dog\)/rain/g'
rain
rain
bird
| |
| shakahshakah@gmail.com 2005-11-26, 9:56 pm |
| solaris9000@gmail.com wrote:
> Hello
>
> I have got a file called "filename" like this:
>
> #
> #
> path1 something1
> #
> path2 something2
> #
>
> I'd like to append "flag" to each line beginning path1 and path2 so the
> file becomes:
>
> #
> #
> path1 something1 flag
> #
> path2 something2 flag
> #
>
> I'd like to use sed for this. So far I can only match one pattern at a
> time in sed. eg
>
> sed '/path1/ s/$/ flag/' filename
> sed '/path2/ s/$/ flag/' filename
>
> Is there anyway I can combine both patterns in one line?
>
> eg sed '/pattern1/ && /pattern2/ s/$/flag/' filename - I know this
> doesnt work.
>
> Thanks in advance.
How about :
sed -e '/path1/ s/$/ flag/' -e '/path2/ s/$/ flag/' filename
?
jc@sarah:~/tmp$ cat sed.test
#
#
path1 something1
#
path2 something2
#
jc@sarah:~/tmp$ sed -e '/path1/ s/$/ flag/' -e '/path2/ s/$/ flag/'
sed.test
#
#
path1 something1 flag
#
path2 something2 flag
#
| |
| shakahshakah@gmail.com 2005-11-26, 9:56 pm |
| solaris9000@gmail.com wrote:
> Hello
>
> I have got a file called "filename" like this:
>
> #
> #
> path1 something1
> #
> path2 something2
> #
>
> I'd like to append "flag" to each line beginning path1 and path2 so the
> file becomes:
>
> #
> #
> path1 something1 flag
> #
> path2 something2 flag
> #
>
> I'd like to use sed for this. So far I can only match one pattern at a
> time in sed. eg
>
> sed '/path1/ s/$/ flag/' filename
> sed '/path2/ s/$/ flag/' filename
>
> Is there anyway I can combine both patterns in one line?
>
> eg sed '/pattern1/ && /pattern2/ s/$/flag/' filename - I know this
> doesnt work.
>
> Thanks in advance.
How about :
sed -e '/path1/ s/$/ flag/' -e '/path2/ s/$/ flag/' filename
?
jc@sarah:~/tmp$ cat sed.test
#
#
path1 something1
#
path2 something2
#
jc@sarah:~/tmp$ sed -e '/path1/ s/$/ flag/' -e '/path2/ s/$/ flag/'
sed.test
#
#
path1 something1 flag
#
path2 something2 flag
#
|
|
|
|