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

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

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

그래서 텍스트 파일의 내 줄은 다음과 같습니다

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

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). 이렇게 NF1씩 늘어나게 됩니다 . 그런 다음 문자열을 두 번째에서 마지막 필드에 할당합니다 $(NF-1).

그런 다음 모든 줄을 인쇄하십시오.

출력을 새 파일로 리디렉션하고 파일을 해당 위치로 이동합니다.

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

답변2

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

=다음 공백 앞의 기호, 공백 및 모든 문자를 캡처합니다 . 바로 이 부분입니다 = 192.168.122.. 그런 다음 일치하는 모든 문자를 해당 문자로 바꾸고 &(즉, 이 부분을 변경하지 말고 반환하기만 하면 됩니다) 원하는 ip 를 추가합니다 192.12.0.

입력하다

hosts allow = 192.168.122. 172.24.0

산출

hosts allow = 192.168.122. 192.12.0 172.24.0

관련 정보