このIPリストをフォーマットする方法は?

このIPリストをフォーマットする方法は?

非常に単純な形式のカンマ区切りリストがあります。

IPrangestart,IPrangeend,int number,date (delimited by slashes),Name (is dirty, contains spaces, dots, dashes, quotemarks etc)

最初の3列は空白にできません。私はこれをダッシュ​​で区切られた乱数を表す標準のファイアウォールブロック可能形式に変換したいと思います。

IPrangestart-IPrangend

時にはフィールドが空です。何千もの行に対してこれを行う最も速くて賢い方法は何ですか?各文字に対して[A-Za-z]と各数字に対して[0-9]のような正規表現を試しましたが、ランダムな".と上記で指定された同様の項目の問題は解決されませんでした。

私はこの正規表現を試しましたが、ダッシュ間のダッシュを認識する方法がわかりません。(\b25[0-5]|\b2[0-4][0-9]|\b[01]?[0-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}

答え1

ipに関連する列が常に存在する場合(あなたの意見に従って)、cut最初の2つのカンマで区切られた列を維持し、次に,置き換えます-

cut -d, -f1,2 --output-delimiter=-

GNU cut何らかの理由でfromにアクセスできない場合coreutils(質問にタグを付けたため疑わしいlinux)、次のオプションを見逃すことがあります--output-delimiter = -

sed 's/^\([^,]*\),([^,]*).*/\1-\2/' file

答え2

awk -F "," 'BEGIN{OFS="-"}{print $1,$2}' File

出力

IPrangestart-IPrangeend

関連情報