转换(sed 或 awk,或任何)包含以下内容的文件:

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)

任何帮助将不胜感激,谢谢。

ded*_*max 6

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包含双引号。

" " 此处的额外空间为印刷品之间留出空间。

  1. 打印第一个字段:

    $ 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)
  2. 打印第二列

    $ 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)
  3. 中间加空格。

    $ 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)
  4. 添加双引号。

    $ 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)