このファイルがあります。
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