How to replace a character within a matched pattern using ampersand (&)

前端 未结 4 1947
花落未央
花落未央 2021-02-01 07:05

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 a

4条回答
  •  暗喜
    暗喜 (楼主)
    2021-02-01 07:35

    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. The first one, stored in \1, contains an "a"
    2. The second one, stored in \2, contains a sequence of "p"s (in the example it contains "pp")
    3. The third one, stored in \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 =)

提交回复
热议问题