次の文字列を含むテキストファイルがあり、それをCSVファイルに変換したいと思います。
次の文字列を分割したいと思います。
location = /example/url/newsite/redirect {return 301 https://example.com/fr;}
...次の値で:
/example/url/newsite/redirect,301,https://example.com/fr
現在、次のコマンドを使用しています
awk '{gsub(/;}/,"",$6); if ($1 == location) print $3","$6 }' redirections/*.redirections >> redirect-csv/redirect.csv
理想的にはファイル名を指定する必要はありません。 Redirections/ のすべての *.redirections ファイルをインポートし、1:1 マッピングを実行して Redirect-csv にファイルを生成する必要があります。
redirections/
site1.redirections
site2.redirections
Run the magic command.
redirect-csv/
site1.csv
site2.csv
ベストアンサー1
この種の問題を解決する最善の方法は、正規表現を使用して文字列をパターンに一致させ、関連部分を抽出することです。
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])
}'