sed 및 bash를 사용하여 네트워킹 구성 파일 생성

sed 및 bash를 사용하여 네트워킹 구성 파일 생성

나는 스크립팅 능력이 약간 녹슬었고 파일을 생성하고(새 파일 이름 생성) 파일의 IP 주소를 +1씩 증가시켜 편집하는 스크립트를 만들기 위한 좋은 시작점을 찾으려고 노력하고 있습니다.

내 시나리오는 다음과 같습니다. 각각 IP가 증가하는 네트워크 스크립트에 추가할 약 50개의 IP 주소가 있습니다. 이 작업은 손으로 할 수도 있지만 지금이 스크립팅 기술을 익힐 수 있는 좋은 기회라고 생각했습니다.

명명 체계는 다음과 같습니다.

ifcfg-eth0:1, ifcfg-eth0:2, ifcfg-eth0:3 ...*n*

이 파일의 내용은 다음과 같습니다.

DEVICE=eth0:1
NETMASK=255.255.255.0
IPADDR=10.2.7.148
BOOTPROTO=none
ONBOOT=yes
DNS1=10.2.53.150
PEERDNS=yes
DNS2=10.2.53.250
GATEWAY=10.2.7.1
TYPE=Ethernet
USERCTL=no
IPV6INIT=no

IPADDR=10.2.7.148각 파일마다 +1씩 증가해야 합니다 .

예를 들어, 파일은 등을 ifcfg-eth0:2제외하고는 완전히 동일합니다 .IPADDR10.2.7.149

sedIP 주소를 찾아 교체하려면 호출해야 한다고 확신합니다 .

예를 들어, 다음을 사용하여 IP 주소를 검색 sed할 수 있습니다.

sed -rn '/(IPPADDR=)((1?[0-9][0-9]?|2[0-4][0-9]|25[0-5])\.){3}(1?[0-9][0-9]?|2[0-4][0-9]|25[0-5])/p' file

eth0:N이름이 +1씩 증가하고 파일의 IP 주소를 사용하여 새 파일을 생성하려면 어떤 단계를 수행해야 합니까 ?

미리 감사드립니다!

편집: 파일 이름에 IP 주소가 포함되어서는 안 된다는 점을 명확히 하겠습니다.

생성된 파일의 필드가 1씩 증가해야 한다는 점을 제외하면 위와 동일한 파일 내용을 사용하여 file1을 file2 eth0:1-> 로 복사해야 합니다.eth0:2IPADDR=

참고: 파일 이름도 +1 IE만큼 증가해야 합니다.cp ifcfg-eth0:1 ifcfg-eth0:2

답변1

내가 아는 한 sed숫자에 대한 계산을 할 수 없다는 것을 사용합니다.awk

$ awk -F'.' '$1~"IPADDR"{$NF++;OFS="."}1' file
DEVICE=eth0:1
NETMASK=255.255.255.0
IPADDR=10.2.7.149
BOOTPROTO=none
ONBOOT=yes
DNS1=10.2.53.150
PEERDNS=yes
DNS2=10.2.53.250
GATEWAY=10.2.7.1
TYPE=Ethernet
USERCTL=no
IPV6INIT=no

변경할 파일 루프에 이를 포함합니다.


설명:

  • -F'.': .필드 구분 기호 사용
  • $1~"IPADDR"{}: 첫 번째 필드에 IPADDR패턴이 포함된 경우 내부 내용을 실행합니다.{}
  • $NF++;OFS=".": 마지막 필드의 증분 숫자( NF레코드의 필드 수를 나타냄)
  • 1: 모든 것을 인쇄

답변2

제가 당신을 올바르게 이해했는지 모르겠습니다. 이것이 당신이 원하는 일을 합니까?

세게 때리다:

[root@domain]:test # IP=120
[root@domain]:test # for i in {1..50}; do
> echo "IP=10.11.11.$IP
> NETMASK=255.255.255.0
> DEVICE=eth0:1
> ONBOOT=yes
> DNS1=10.2.53.150
> PEERDNS=yes
> DNS2=10.2.53.250
> GATEWAY=10.2.7.1
> TYPE=Ethernet
> USERCTL=no
> IPV6INIT=no" >> ifcfg-eth0:$i; IP=$((IP+1)); done;

결과:

[root@domain]:test # ls ifcfg* |wc -l
50
[root@domain]:test # grep IP= ifcfg*
ifcfg-eth0:1:IP=10.11.11.120
...
ifcfg-eth0:50:IP=10.11.11.169

답변3

와 함께:

$ perl -ne '
    s/^(IPADDR=10\.2\.7\.)(\d+)/$2 < 255 and sprintf "%s%s", $1, $2 + 1/e;
    print
' file

산출:

DEVICE=eth0:1
NETMASK=255.255.255.0
IPADDR=10.2.7.149
BOOTPROTO=none
ONBOOT=yes
DNS1=10.2.53.150
PEERDNS=yes
DNS2=10.2.53.250
GATEWAY=10.2.7.1
TYPE=Ethernet
USERCTL=no
IPV6INIT=no

-i스위치를 추가하여 파일을 수정할 수 있습니다제자리에.

관련 정보