我有一个包含 20k+ IP 的文件:
104.20.15.220,104.20.61.219,104.20.62.219,104.20.73.221,104.20.74.221,104.20.14.220
104.20.15.220,104.20.73.221,104.20.74.221,104.25.195.107,104.25.196.107,104.20.14.220
91.215.154.209
...
问题是如何在每个字符串上拆分成单个 IP:
104.20.15.220
104.20.61.219
最佳答案
只需使用以下任一命令将逗号替换为新行即可:
tr ',' '\n' < file
sed 's/,/\n/g' file
perl 's/,/\n/g' file
awk 'gsub(/,/,"\n")' file
... 或将每个文本 block 匹配到逗号或行尾:
grep -oP '.*?(?=,|$)' file
...或遍历字段并打印它们:
awk -F, '{for(i=1;i<=NF;i++) print $i}' file
... 或者将记录分隔符设置为逗号并让 awk
完成所有工作:
awk -v RS=, '1' file
awk 1 RS=, file
... 或匹配 IP,您可以使用来自 Matching IPv4 Addresses 的正则表达式:
grep -oE '((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)' file
他们都返回:
104.20.15.220
104.20.61.219
104.20.62.219
104.20.73.221
...
关于bash - 在 Bash 中拆分逗号分隔的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39528273/