sed를 사용하여 텍스트 파일의 줄 중간에 삽입


0

파일의 줄에 텍스트를 추가하는 방법을 연구했습니다.

텍스트 파일에있는 줄은 다음과 같습니다

hosts allow = 192.168.122. 172.24.0 

나는 라인을 다음과 같이 보이도록 IP를 추가하고 싶다

hosts allow = 192.168.122.  192.12.0.  172.24.0

시행 착오를 통해 나는 단지 가지고있다 :

sed -i '/allow/ s/.*/&,192.12.0./' testfile

이것은 다음을 제공합니다.

hosts allow = 192.168.122. 172.24.0. 192.12.0.

1
귀하의 계정이 두 개인 것으로 보이며 귀하의 질문이 이전 계정과 중복됩니다. unix.stackexchange.com/q/392985/72456
αғsнιη

아니, 그것의 다른 질문
Rishav

sed명령은 언급 한 행을 생성하지 않습니다. 쉼표는 어디로 갔습니까?
Kusalananda

답변:


1

awk행에서 두 번째에서 마지막 필드로 문자열을 삽입하는 데 사용 :

$ awk '/allow/ { $(NF+1) = $NF; $(NF-1) = "192.12.0." } { print }' file
hosts allow = 192.168.122. 192.12.0. 172.24.0

첫 번째 블록은 file문자열 을 포함하는 모든 행에 대해 실행됩니다 allow. 먼저 마지막 필드 $NF를 한 단계 더 이동하여로 이동합니다 $(NF+1). 이것은 1 씩 증가 NF합니다. 그런 다음 문자열을 두 번째에서 마지막 필드로 지정합니다 $(NF-1).

그런 다음 모든 줄이 인쇄됩니다.

이 출력을 새 파일로 리디렉션하고 해당 파일을 제자리로 이동하십시오.

awk ...as above... file >file.new && mv file.new file

0
sed 's/= [^ ]*/& 192.12.0/'

=다음 공백 앞 의 부호, 공백 및 모든 문자를 캡처합니다 . 즉,이 부분 = 192.168.122.입니다. 그런 다음 일치하는 모든 문자를 자신으로 바꿉니다 &(즉,이 부분을 변경하지 않고 다시 반환) 192.12.0. 필요한 ip를 추가합니다 .

입력

hosts allow = 192.168.122. 172.24.0

산출

hosts allow = 192.168.122. 192.12.0 172.24.0
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.