输出L选项有问题(“grep-able”输出);例如,它输出:
| 14.138.12.21:123 | unknown | disabled |
| 14.138.184.122:123 | unknown | disabled |
| 14.138.179.27:123 | unknown | disabled |
| 14.138.20.65:123 | unknown | disabled |
| 14.138.12.235:123 | unknown | disabled |
| 14.138.178.97:123 | unknown | disabled |
| 14.138.182.153:123 | unknown | disabled |
| 14.138.178.124:123 | unknown | disabled |
| 14.138.201.191:123 | unknown | disabled |
| 14.138.180.26:123 | unknown | disabled |
| 14.138.13.129:123 | unknown | disabled |
上述内容既不易读也不易理解。
如何使用Linux命令行实用程序,例如sed,awk或grep,使用上面的文件输出如下内容?
输出
14.138.12.21
14.138.184.122
14.138.179.27
14.138.20.65
14.138.12.235
答案 0 :(得分:3)
将awk
字段分隔符用作空格,将:
用于获取第二个字段:
awk -F '[ :]' '{print $2}' file.txt
示例:强>
% cat file.txt
| 14.138.12.21:123 | unknown | disabled |
| 14.138.184.122:123 | unknown | disabled |
| 14.138.179.27:123 | unknown | disabled |
| 14.138.20.65:123 | unknown | disabled |
| 14.138.12.235:123 | unknown | disabled |
| 14.138.178.97:123 | unknown | disabled |
| 14.138.182.153:123 | unknown | disabled |
| 14.138.178.124:123 | unknown | disabled |
| 14.138.201.191:123 | unknown | disabled |
| 14.138.180.26:123 | unknown | disabled |
| 14.138.13.129:123 | unknown | disabled |
% awk -F '[ :]' '{print $2}' file.txt
14.138.12.21
14.138.184.122
14.138.179.27
14.138.20.65
14.138.12.235
14.138.178.97
14.138.182.153
14.138.178.124
14.138.201.191
14.138.180.26
14.138.13.129
答案 1 :(得分:2)
AWK非常适合您希望通过" columns"拆分文件的情况,并且您确切知道值/列的顺序是不变的。 AWK通过字段分隔符(可以是'[: ]'
之类的正则表达式)来分割行。列名可以通过左侧的位置访问:$1
,$2
,$3
等:
awk -F '[ :]' '{print $2}' src.log
awk -F '[ :|]' '{print $3}' src.log
awk 'BEGIN {FS="[ :|]"} {print $3}' src.log
您还可以使用正则表达式过滤行:
awk -F '[ :]' '/138\.179\./ {print $2}' src.log
但是,它是impossible to capture substrings with the regular expression groups。
SED在正则表达式方面更灵活:
sed -r 's/^[^0-9]*([0-9\.]+)\:.*/\1/' src.log
然而,它缺少我们过去常常在日常编程中使用的类似Perl的正则表达式的许多有用功能。例如,即使扩展语法(-r
)也无法将\d
解释为数字。
也许,Perl是解析文件最灵活的工具。您可以选择简单的表达式:
perl -n -e '/^\D*([^:]+):/ and print "$1\n"' src.log
或按照您的要求进行严格匹配:
perl -n -e '/^\D*((?:\d{1,3}\.){3}\d{1,3}):/ and print "$1\n"' src.log
答案 2 :(得分:1)
使用sed
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div id="app"></div>