Board logo

标题: [文本处理] 批处理怎样根据缩进删除多行? [打印本页]

作者: newswan    时间: 2021-1-31 02:01     标题: 批处理怎样根据缩进删除多行?

本帖最后由 newswan 于 2021-2-1 17:21 编辑
  1. proxies:
  2.   - name: TW_2711 |14.12Mb
  3.     server: 2.58.241.4
  4.     port: 38033
  5.     type: ss
  6.     cipher: aes-256-gcm
  7.     password: xpQwyV4W5FdA6NMANJJx73US
  8.   - name:  TW_2712 |12.94Mb
  9.     server: 2.58.241.3
  10.     port: 37473
  11.     type: ss
  12.     cipher: aes-256-gcm
  13.     password: enctdKyJfSu76VqznKwTt6Ap
  14. proxy-groups:
  15.   - name:  节点选择
  16.     type: select
  17.     proxies:
  18.       - ♻️ 自动选择
  19.       - DIRECT
  20.       -  TW_2711 |14.12Mb
  21.       -  TW_2712 |12.94Mb
  22.   - name: ♻️ 自动选择
  23.     type: url-test
  24.     url: http://www.gstatic.com/generate_204
  25.     interval: 300
  26.     tolerance: 50
  27.     proxies:
  28.       -  TW_2711 |14.12Mb
  29.       -  TW_2712 |12.94Mb
复制代码
proxies 以下,每个name为一段,将包含"TW"的段删除?
用怎么的方法好?
上面文本中,第2到第7为一组,第8到13为一组,如果组的第一行包含 "TW" ,删除这一组
作者: qixiaobin0715    时间: 2021-1-31 10:30

没表达清楚,将处理结果贴出来让人更容易理解。
作者: flashercs    时间: 2021-1-31 11:02

本帖最后由 flashercs 于 2021-1-31 22:33 编辑
  1. sed -C -E -e ":a;$!{N;ba;};s/^([[:blank:]]*)-[[:blank:]]+name:[[:blank:]]+TW[^\n]*$(\n([[:space:]]*|\1[[:blank:]]+[^\n]*)$)*\n?//mg" .\A.txt>.\B.txt
复制代码
论坛下载 http://bcn.bathome.net/tool/4.8/sed.exe
作者: newswan    时间: 2021-2-1 17:27

本帖最后由 newswan 于 2021-2-1 17:31 编辑

回复 2# qixiaobin0715

这种情况可以概括为:
    yaml 格式 或者 json 格式 ,一个段包含多行,根据段中一个条件,删除整段
  1. name 1
  2.   line 1-1
  3.   line 1-2
  4. name 2
  5.   line 2-1
  6.   line 2-1
复制代码
  1. {
  2.   line 1-1
  3.   line 1-2
  4.   line 1-3
  5. }
  6. {
  7.   line 2-1
  8.   line 2-2
  9.   line 2-3
  10. }
复制代码

作者: newswan    时间: 2021-2-1 17:32

回复 3# flashercs


    谢谢,学习下




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2