bash - 在 Bash 中拆分逗号分隔的字符串

标签 bash

我有一个包含 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/

相关文章:

java - 集成对 jar 文件的调用 |切| awk 和一个 java 程序成为一个统一的进程

linux - 是否可以将 awk 中的打印语句通过管道传输到多个文本文件?

linux - 按名称读取命令行参数

linux - shell 程序中不显示日期

bash - 如何评估变量 bash 脚本中的变量?

mysql - 在 bash 中将标准输出转换为 utf8

linux - 在文本文件中取第 n 列

bash - Terminal.app 中的新选项卡无法在同一目录中打开/bash 失败(Mountain Lion)

linux - 查看文件的实时日志,仅回显符合特定条件的行

bash - 在 Bash 中循环遍历目录