Вы можете попробовать:
sed -r 's!rec:id=(.*?)&name=(.*?)&age=(.*?)!\1 \2 \3!' input_file
Если вы не знаете rec:id
и т. Д. Заранее, но знаете, что их три, вы можете попробовать:
sed -r 's![^=]+=(.*?)&[^=]+=(.*?)&[^=]+=(.*?)!\1 \2 \3!' input_file
Если вы заранее не знаете, сколько пар &name=value
вам нужно, но хотите вывести все значения, вы можете попробовать что-то вроде:
grep -P -o '(?<==)([^&]*)(?=&|$)' | xargs
, где -P
означает «регулярное выражение perl», регулярное выражение говорит «найдите строку, за которой следует &
(или конец строки), и перед которой стоит знак равенства», -o
означает печать только соответствует (т. е. 1, zz и 21) каждый на своей собственной строке, и | xargs
перемещает их из своей собственной строки в одну строку и разделяет пробел (т. е. 1\nzz\n21
до 1 zz 21
).