Для этого лучше всего использовать регулярное выражение для сопоставления строки с шаблоном и извлечения соответствующих частей.
echo "location = /example/url/newsite/redirect {return 301 https://example.com/fr;}" |
sed -n 's/^location = \(.*\) {return \(3[[:digit:]]\{2\}\) \(.*\);}$/\1,\2,\3/p'
дает
/example/url/newsite/redirect,301,https://example.com/fr
Или, если поля могут содержать специальные символы в формате CSV (, например ,
,"
):
perl -MText::CSV -lne '
BEGIN{$c = Text::CSV->new}
if (/^location = (.*) \{return (3\d\d) (.*);\}$/) {
$c->print(STDOUT, [$1, $2, $3])
}'