vim/sed/awk를 사용하여 복잡한 텍스트를 추가하는 방법

vim/sed/awk를 사용하여 복잡한 텍스트를 추가하는 방법

다음의 이전 게시물(명령줄에서 vim을 사용하여 파일 중간에 텍스트를 추가하는 방법은 무엇입니까?&다른 파일의 패턴(태그) 앞에 한 파일의 내용을 삽입하는 방법은 무엇입니까?), 저는 좀 더 복잡한 사례가 있어서 귀하의 조언이 필요합니다. 다음 Test.conf 파일이 있습니다.

server {
    listen       80;
    server_name  jenkins2;

    location /DE06/ {
        proxy_pass     http://jenkins2:18015/DE06/;
    }
}

명령을 실행하고 싶으므로 결국 파일 내용은 다음과 같습니다.

server {
    listen       80;
    server_name  jenkins2;

    location /DE15/ {
        proxy_pass     http://jenkins2:18015/DE15/;
    }

    location /DE06/ {
        proxy_pass     http://jenkins2:52716/DE06/;
    }
}

즉, jenkins2라는 단어가 처음 나타나는 것을 찾은 후 다음을 추가해야 합니다.

location /DE15/ {
    proxy_pass     http://jenkins2:18015/DE15/;
}

올바른 명령이 무엇인지 아시나요?

답변1

vim +/jenkins2 +j +":r insert.txt" +gg=G +wq testfile.txt

그 중 insert.txt에는 추가하려는 코드 세그먼트가 포함되어 있고 testfile.txt는 편집하려는 파일입니다.

그러나 vim이 최고의 도구인지는 확실하지 않습니다.

  • +/jenkins2젠킨스 검색 2
  • +j한 줄 아래로 이동
  • ":r insert.txt"삽입할 파일을 읽습니다. 따옴표에 주목하세요!
  • +gg=G자동으로 파일 들여쓰기
  • +wq그리고 그걸 적어봐

답변2

작동하는 sed 명령을 찾았습니다.

sed -i -e '/jenkins5/{ r example.txt' -e '; :L; n; bL;}' nginx_jenkins.conf

env 매개변수가 필요한 경우 다음을 사용할 수 있습니다.

sed -i -e '/'${Alias}'/{ r example.txt' -e '; :L; n; bL;}' nginx_jenkins.conf

답변3

재미와 학습을 위해 vimgolf와 같은 예가 있습니다.

vim +"4t4|/D/,/}/t4|'[,s/06/15/|s/52716/18015/|x" file.conf

명령은 다음으로 구분됩니다 |.

  • 4t44행을 4행으로 복사합니다.
  • /D/,/}/t4첫 번째가 포함된 줄부터 D다음이 포함된 줄 }, 4번째 줄까지 복사합니다.
  • '[,s/06/15/마지막으로 변경된 첫 번째 줄부터 현재 줄(마지막으로 변경된 줄)까지 다음 06으로 바꿉니다.15
  • s/52716/18015/현재 줄에서 바꾸기( 06마지막 교체 위치)
  • x변경 사항을 저장하고 종료합니다.

:h :copy, :h '[, :h :/

관련 정보