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

これはできますが、1行のトリックにしたいと for loop思います。sed

答え1

sed 's@\([^ ]*\)\(.*\)@\1\2 #http://www.foo.com=\1/test.php@'
  • アドレスを区切り文字として使用する@ときは、アドレスにバックスラッシュを使用する必要はありません。

  • IPアドレスはと一致します[^ ]*。つまり、空でない項目は0回以上一致し、によってキャプチャさ\(\)れます\1。残りの行\2.*つまり何でもキャプチャされます。

答え2

1行の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

関連情報