複数の区切り文字を使用した文字列の分割

複数の区切り文字を使用した文字列の分割

次の文字列を含むテキストファイルがあり、それを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])
  }'

おすすめ記事