파일에서 패턴을 검색하고 인라인 열의 하위 문자열 바꾸기

파일에서 패턴을 검색하고 인라인 열의 하위 문자열 바꾸기

다음은 변경할 파일의 일부입니다. awk 또는 sed를 사용할 수 있습니다. 모든 유틸리티는 패턴 일치에 적합합니다.

rhts-mgr hostname                       g05-rhts01
rhts-mgr ntp-server-ip-addr             10.113.XX.31
rhts-mgr ntp-redundant-server-ip-addr   10.113.XX.32
rhts-mgr extern-iface ip-addr           10.113.XX.129
rhts-mgr extern-iface broadcast-addr    10.113.XX.255
rhts-mgr extern-iface default-gw        10.113.XX.1

나는 awk, sed 조합의 변형을 시도했지만 여전히 이것에 익숙하지 않습니다. 위 파일 항목을 아래 파일 항목으로 변경하려고 합니다.

rhts-mgr hostname                       g08-rhts01
rhts-mgr ntp-server-ip-addr             10.113.55.31
rhts-mgr ntp-redundant-server-ip-addr   10.113.55.32
rhts-mgr extern-iface ip-addr           10.113.55.129
rhts-mgr extern-iface broadcast-addr    10.113.55.255
rhts-mgr extern-iface default-gw        10.113.55.1

논리는 다음과 같습니다.

  1. rhts-mgr 호스트 이름을 검색하고 $3의 모든 호스트 이름 항목을 g*-rhts*에서 g08-rhts*로 바꿉니다.
  2. IP 주소의 세 번째 옥텟에 있는 서브넷만 바꿉니다(예: 10.113.XX.31에서 10.113.55.31로).

다음과 같은 것이 도움이 될 것입니다

awk '/^rhts-mgr hostname/ {<replace $3 with g08-rhts[0-9][0-9]>}; print}' file
awk '/^rhts-mgr extern-iface ip-addr/ {<replace $4 10.113.XX.129 with 10.113.55.129>}; print}' file

편집해야 할 파일이 100개가 넘는데 이 편집은 각 파일에 대해 수행되어야 합니다. 따라서 하나의 파일에서 모든 교체 항목을 검색하고 검색 중에 이를 교체하여 텍스트 처리 속도를 높일 수 있다면 좋을 것입니다.

답변1

sed:

sed -E '
  s/^(rhts-mgr hostname +g)[0-9]+(\-rhts.*)$/\108\2/;
  s/^(rhts-mgr.* 10\.113\.)[0-9]+(\..*)$/\155\2/;
  s/^(rhts-cntrl.* 10\.113\.)[0-9]+(\..*)$/\153\2/
' file

진주:

perl -ne '
  s/^(rhts-mgr hostname\s+g)\d+(\-rhts.*)$/${1}08${2}/;
  s/^(rhts-mgr.* 10\.113\.)\d+(\..*)$/${1}55${2}/;
  s/^(rhts-cntrl.* 10\.113\.)\d+(\..*)$/${1}53${2}/;
  print
' file

관련 정보