非常に単純な形式のカンマ区切りリストがあります。
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