Monday, May 9, 2022

[SOLVED] sed - add new line with matched groups value

Issue

I have input text with a pattern '([\w_]+TAG) = "\w+";', and if matched, then append a new line with matched group string like 'found \1'. for example:

input text:

abcTAG = "hello";
efgTAG = "world";

expected output:

abcTAG = "hello";
found abcTAG
efgTAG = "world";
found efgTAG

I try below sed command but not work:

sed -E '/(\w+TAG) = "\w+";/a found \1' a.txt

Current output:

abcTAG = "hello";
found 1
efgTAG = "world";
found 1

Solution

You cannot use the backreference \1 in a command. Please try instead:

sed -E 's/(\w+TAG) = "\w+";/&\nfound \1/' a.txt

Output:

abcTAG = "hello";
found abcTAG
efgTAG = "world";
found efgTAG

Please note it assumes GNU sed which supports \w and \n.

[Edit]
If you want to match the line endings with the input file, please try:

sed -E 's/(\w+TAG) = "\w+";(\r?)/&\nfound \1\2/' a.txt


Answered By - tshiono
Answer Checked By - Clifford M. (WPSolving Volunteer)