我有一个格式(输入):
95.56.00.000 root pass|220 smtp1.auchan.hu
我想获得(输出):
root@auchan.hu,root,pass,95.56.00.000:465
IP可以是任何东西,也可以是域名(包括子域名),但我们公司的登录名和密码是相同的。另外,如您所见,我将在输出结果中添加一个端口465。
我试着用sed和awk做这件事。
答案 0 :(得分:1)
$ awk -F'[ |]' -v OFS=',' '{sub(/[^.]+./,"",$5); print $2"@"$5, $2, $3, $1":465"}' <<<'95.56.00.000 root pass|220 smtp1.auchan.hu'
root@auchan.hu,root,pass,95.56.00.000:465
答案 1 :(得分:0)
你可以写:
awk -F'[ |]|smtp[0-9]*\\.' '{printf "%s@%s,%s,%s,%s:465\n",$2,$NF,$2,$3,$1}'
答案 2 :(得分:0)
awk '{ split($4, d, ".");
split($3, p, "|");
print $2 "@" d[2] "." d[3] "," $2 "," p[1] "," $1 ":465" }'
答案 3 :(得分:0)
使用sed:
$ sed -E 's/^([^ ]*) ([^ ]*) ([^|]*)[^ ]* [^.]*\.(.*)/\2@\4,\2,\3,\1:465/' <<< '95.56.00.000 root pass|220 smtp1.auchan.hu'
root@auchan.hu,root,pass,95.56.00.000:465
这使用带有四个捕获组的单个替换命令,假设输入中的单词之间有空格:
^([^ ]*) # 1 (captured): non-spaces anchored at start of line
([^ ]*) # 2 (captured): next group of non-spaces
([^|]*) # 3 (captured): group of non-pipes
[^ ]* # a (not captured): group of non-spaces
[^.]*\. # b (not captured): non-periods followed by one period
(.*) # 4 (captured): rest of line
所以输入行按如下方式分成这些组:
95.56.00.000 root pass|220 smtp1.auchan.hu
<----1-----> <2-> <3-><a-> <-b--><---6--->
然后在替换命令的第二部分重新排列,添加@
,逗号和端口。
答案 4 :(得分:0)
使用sed
命令删除不必要的项目,然后部署awk
根据您喜欢的顺序打印值。
echo "95.56.00.000 root pass|220 smtp1.auchan.hu" | sed 's/smtp1.//g' | sed 's/|/\ /g' | awk '{print $2"@"$5","$2","$3","$1":456"}'