Ger*_*ald 2 command-line text-processing
我正在寻找一种使用一行 linux 命令(sed 或 awk 或任何东西)转换以下文件(example1.txt)的方法;
1.2.3.4:21
172.16.1.2:80
192.168.5.4:443
192.168.10.1:7007
Run Code Online (Sandbox Code Playgroud)
变成这样的格式:
"1.2.3.4" "21"
"172.16.1.2" "80"
"192.168.5.4" "443"
"192.168.10.1" "7007"
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激,谢谢。
AWK 你可以使用像下面这样的变量。
awk -F ':' -v q='"' '{print q $1 q " " q $2 q}' example1.txt
Run Code Online (Sandbox Code Playgroud)
-F定义字段分隔符。这就是它将两列分成$1和 的方式$2。
-v帮助我们定义一个变量,即q. q包含双引号。
" " 此处的额外空间为印刷品之间留出空间。
打印第一个字段:
$ awk -F ':' '{print $1}' example1.txt
1.2.3.4
172.16.1.2
192.168.5.4
192.168.10.1
Run Code Online (Sandbox Code Playgroud)打印第二列
$ awk -F ':' '{print $1 $2}' example1.txt
1.2.3.421
172.16.1.280
192.168.5.4443
192.168.10.17007
Run Code Online (Sandbox Code Playgroud)中间加空格。
$ awk -F ':' '{print $1 " " $2}' example1.txt
1.2.3.4 21
172.16.1.2 80
192.168.5.4 443
192.168.10.1 7007
Run Code Online (Sandbox Code Playgroud)添加双引号。
$ awk -F ':' -v q='"' '{print q $1 q " " q $2 q}' example1.txt
"1.2.3.4" "21"
"172.16.1.2" "80"
"192.168.5.4" "443"
"192.168.10.1" "7007"
Run Code Online (Sandbox Code Playgroud)上面的命令只会打印它。如果要将其保存到文件中,可以运行以下命令。
$ awk -F ':' -v q='"' '{print q $1 q " " q $2 q}' example1.txt > example2.txt
$ cat example2.txt
"1.2.3.4" "21"
"172.16.1.2" "80"
"192.168.5.4" "443"
"192.168.10.1" "7007"
Run Code Online (Sandbox Code Playgroud)
此外,下面的命令也可以给你同样的结果。
$ awk -F':' '{print "\""$1"\""" ""\""$2"\""}' example1.txt
"1.2.3.4" "21"
"172.16.1.2" "80"
"192.168.5.4" "443"
"192.168.10.1" "7007"
Run Code Online (Sandbox Code Playgroud)