다른 파일의 키워드 뒤에 한 파일의 줄을 삽입하는 방법은 무엇입니까?

다른 파일의 키워드 뒤에 한 파일의 줄을 삽입하는 방법은 무엇입니까?

다음 내용이 포함된 파일이 있습니다.

10.48.29.68 doggy
10.65.8.184 kitty
10.48.15.104 froggy

bc group이 파일의 내용을 호스트 파일의 행 다음에 호스트 파일에 삽입해야 합니다 .

서버의 호스트 파일에는 이미 수백 개의 항목이 있습니다. Bc는 호스트 파일의 그룹입니다. 위 파일에서 IP 주소와 호스트 이름을 읽고 해당 항목을 호스트 파일 헤더 아래에 넣는 코드가 필요합니다 bc group.

위의 새 파일은 호스트 파일의 키워드 뒤에 작성되어야 합니다 bc group.

예를 들어 내 호스트 파일에 다음 줄이 포함되어 있는 경우:

10.59.12.232 bc4
10.48.29.68 xy9
bc group
10.63.71.136 bc2
10.63.71.214 bc3

호스트 파일을 다음으로 변환해야 합니다.

10.59.12.232 bc4
10.48.29.68 xy9
bc group
10.48.29.68 doggy
10.65.8.184 kitty
10.48.15.104 froggy
10.63.71.136 bc2
10.63.71.214 bc3

첫 번째 파일의 모든 줄을 bc group호스트 파일의 줄에 추가한 다음 호스트 파일의 나머지 줄을 계속 추가해야 합니다.

답변1

이 시도:

sed '/^bc group$/ r file1' hostfile

sed명령은 의 줄을 hostfile출력에 복사하고 file1의 모든 줄 다음 줄을 읽습니다(삽입).bc grouphostfile

출력을 다른 파일에 저장하려면 > newhostfile다음 명령에 추가하십시오.

sed '/^bc group$/ r file1' hostfile > newhostfile

그러나 나는 이 방법을 권장합니다. 즉, 백업에 접미사를 사용 .bak하고 파일을 제자리에서 편집하는 것입니다.

sed -i.bak '/^bc group$/ r file1' hostfile

bc group이 에 여러 번 나타나면 hostfile행이 file1여러 번 삽입됩니다.

답변2

다음과 같은 것이 필요한 것 같습니다.

INPUT_FILE='/path/to/file'
GROUP_NAME='# bc group'
HOSTS_FILE='/etc/hosts'

echo "$GROUP_NAME" >> "$HOSTS_FILE"
while read line; do

    echo "$line" >> "$HOSTS_FILE"

done < "$INPUT_FILE"

스크립트는 먼저 $HOSTS_FILE귀하의 스크립트 뒤에 추가(주석 처리)됩니다 $GROUP_NAME. 그런 다음 입력 파일의 각 줄을 반복하여 그룹 이름 아래의 호스트 파일에 추가합니다.

관련 정보