sed 提取第一个字段并移动到特定位置

sed 提取第一个字段并移动到特定位置

我有这个文件

10.1.1.1    www1           
10.1.1.2    www2           
10.1.1.3    www3            

我想提取第一个IP address字段并将其移动到以下位置http://www.foo.com=10.1.1.1/test.php

10.1.1.1    www1           # http://www.foo.com=10.1.1.1/test.php
10.1.1.2    www2           # http://www.foo.com=10.1.1.2/test.php
10.1.1.3    www3           # http://www.foo.com=10.1.1.3/test.php

我可以做到这一点,for loop但我想sed用单线技巧做到这一点。

答案1

sed 's@\([^ ]*\)\(.*\)@\1\2 #http://www.foo.com=\1/test.php@'
  • 我用作@分隔符时不必在地址中使用反斜杠。

  • IP 地址由 匹配[^ ]*,即非空白至少零次,并由\(\)into捕获\1。该行的其余部分被 捕获\2.*即任何内容。

答案2

一行 awk 方法:(如果你真的不需要 awk,我会删除)

感谢 RomanPerekrest 的改进:

awk '{ $3="# http://www.foo.com="$1"/test.php" }1' $file

或者,如果您想要/需要在输出中保留选项卡:

awk 'BEGIN{OFS="\t";}{ $3="# http://www.foo.com="$1"/test.php" }1' $file

相关内容