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/;
    }
}

つまり、ジェンキンス2という単語が最初に表示されることを見つけたら、次のものを追加する必要があります。

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
  • +j1行下に移動
  • ":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 :/

関連情報