複数のキーワード間で段落を置き換える方法

複数のキーワード間で段落を置き換える方法

キーワード間の段落全体を変更しようとしています。

したがって:

   port: 6666
    socks-port: 6699
    redir-port: 6669
    allow-lan: true
    mode: Rule
    log-level: info
    external-controller: 0.0.0.0:9090
    
    dns:
  enable: true
  ipv6: false
  # listen: 0.0.0.0:53
  # enhanced-mode: fake-ip
  nameserver:
    - 223.5.5.5
    - 114.114.114.114
  #  - 'tls://dns.rubyfish.cn:853'
  #fallback:
  #  - 'tcp://208.67.222.222:443'
  #  - 'tls://1.0.0.1:853'
  #  - 8.8.8.8
    proxies:
      - type: ss
        server: test.com
        
    proxy-groups:
    
      - name: 

ベストアンサー1

代替テキストがfile1次の場合(最後の行を追加)

dns:
   enable: true
   enhanced-mode: redir-host # 或 fake-ip
   listen: 0.0.0.0:53
   nameserver:
      - 223.5.5.5
experimental:
   interface-name: Ethernet # 物理网卡名称
proxies:

少し検索してみると、sed住所の範囲が貪欲ではないようで、こうすることができます。

sed -e "/^    proxies:/ r file1" -e "/dns:/,/proxies:/d" file

r読んで一致させたら、file1オリジナルに追加してください。file/^ proxies:/

sed -e "/^    proxies:/ r file1"

/dns:/次に、全体を再処理し、最初の一致から,最初の一致までの行範囲をキャプチャし/proxies:/d削除します。

    -e "/dns:/,/proxies:/d" file

sed上に役立つ資料があります絵のモア

コメントを更新するには編集してください。

他のproxies:行は、行の先頭に4つのスペースがあるという点で目標とは異なります(他の行は4つ以上)。含めたい置換項目を固定すると、^ 興味のある交換項目のみが選択されるため、

sed -e "/^    proxies:/ r file1" -e "/dns:/,/proxies:/d" file

上記のインサートを使用すると、file1次のようになります。

   port: 6666
    socks-port: 6699
    redir-port: 6669
    allow-lan: true
    mode: Rule
    log-level: info
    external-controller: 0.0.0.0:9090
    
dns:
   enable: true
   enhanced-mode: redir-host # 或 fake-ip
   listen: 0.0.0.0:53
   nameserver:
      - 223.5.5.5
experimental:
   interface-name: Ethernet # 物理网卡名称
proxies:
      - type: ss
        server: test.com
        
    proxy-groups:
    
      - name: 

おすすめ記事