キーワード間の段落全体を変更しようとしています。
したがって:
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:
答え2
sedを使用すると、必要なものを取得できます。
sed -e '
/dns:/,/proxies:/!b
/dns:/r file1
/proxies:/!d
' file
説明する:
- 範囲外の行はそのまま印刷されます。
- 範囲はDNSラインの始まりとプロキシの終わりです。
- 範囲内で、stdoutストリームにdns行を挿入します。
- エージェント以外の範囲内のすべての行を削除する
- read コマンドはパターン空間に触れないため、dns を削除しても読み取りファイル file1 が印刷されます。
答え3
file1
代替テキストが含まれているとします。
$ cat 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 # 物理网卡名称
file2
すべてのUNIXシステムでawkを使用してシェルのテキスト入力に変更を適用したいファイル。
$ cat tst.awk
NR == FNR { new = (NR>1 ? new ORS : "") $0; next }
$1 == "dns:" { print new; f=1 }
$1 == "proxies:" { f=0 }
!f
。
$ awk -f tst.awk file1 file2
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: