When we match a pattern using sed, the matched pattern is stored in the "ampersand" (&) variable. IS there a way to replace a character in this matched pattern using the ampersand itself ?
For example, if & contains the string "apple1", how can I use & to make the string to "apple2" (i.e replace 1 by 2) ?
`sed` command is one of the ways to do replacement task. This command can be used to replace text in a string or a file by using a different pattern.
To insert an actual ampersand in the replacement text, use \& .
Turns out that the ampersand (&) has a special meaning in sed and is, in this case, being used to "append characters after found element". Practical example: # cat /tmp/xxx.html | sed "s/text/& I wrote myself/g" This is a text I wrote myself containing an ö umlaut. Because in German we use ä ö ü.
\& works for me. For example, I can replace all instances of amp with & by using sed "s/amp/\&/g" . If you're still having problems, you should post a new question with your input string and your code. Yea it does.
If I guessed right, what you want to do is to apply a subsitution in a pattern matched. You can't do that using &
. You want to do this instead:
echo apple1 apple3 apple1 apple2 botemo1 | sed '/apple./ { s/apple1/apple2/g; }'
This means that you want to execute the command substitution only on the lines that matches the pattern /apple./
.
You can also use a capture group. A capture is used to grab a part of the match and save it into an auxiliary variable, that is named numerically in the order that the capture appears.
echo apple1 | sed -e 's/\(a\)\(p*\)\(le\)1/\1\2\32/g'
We used three captures:
\1
, contains an "a"\2
, contains a sequence of "p"s (in the example it contains "pp")\3
, contains the sequence "le"Now we can print the replacement using the matches we captured: \1\2\32
. Notice that we are using 3 capture values to generate "apple" and then we append a 2. This wont be interpreted as variable \32
because we can only have a total of 9 captures.
Hope this helps =)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With