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

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

我正在寻找一种方法来使用一行 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

变成如下格式:

"1.2.3.4" "21"
"172.16.1.2" "80"
"192.168.5.4" "443"
"192.168.10.1" "7007"

任何帮助都将非常感谢,谢谢。

答案1

您可以使用 AWK 执行如下操作。

awk -F ':' -v q='"' '{print q $1 q " "  q $2 q}' example1.txt

-F定义字段分隔符。这就是它将两列分成$1和 的方式$2

-v帮助我们定义一个变量,它是qq包含双引号。

" "此处的额外空间为打印件之间提供了空间。

  1. 打印第一个字段:

    $ awk -F ':' '{print  $1}' example1.txt
    1.2.3.4
    172.16.1.2
    192.168.5.4
    192.168.10.1
    
  2. 打印第二列

    $ awk -F ':' '{print  $1  $2}' example1.txt
    1.2.3.421
    172.16.1.280
    192.168.5.4443
    192.168.10.17007
    
  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
    
  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"
    

上述命令只会打印它。如果您想将其保存到文件中,可以运行以下命令。

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

此外,以下命令也可以给您相同的结果。

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

答案2

当所有 sed 命令都可以连接成一个时,就无需使用多个 sed 命令:

sed 's/^/"/; s/:/" "/; s/$/"/' input.txt

使用 awk:

awk '{sub("^","\"");sub(":","\" \"");sub("$","\"");print}' input.txt

答案3

使用 Sed

sed 's/\(.*\):\(.*\)/"\1" "\2"/'

使用 Bash

while IFS=: read addr port; do echo \"$addr\" \"$port\"; done

甚至

while read line; do echo \"${line/:/'" "'}\"; done

答案4

使用 Miller (https://github.com/johnkerl/miller)并运行

mlr --csv --quote-all -N --ifs ":" --ofs " " cat input.csv

你有

"1.2.3.4" "21"
"172.16.1.2" "80"
"192.168.5.4" "443"
"192.168.10.1" "7007"

相关内容