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 주소는 와 일치합니다 [^ ]*. 즉, 비어 있지 않은 항목이 0회 이상 일치하고 \(\)에 의해 캡처됩니다 \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

관련 정보