Board logo

标题: [文本处理] 【已解决】批处理BAT如何保留一定范围字符长度的行? [打印本页]

作者: elec    时间: 2014-5-21 08:14     标题: 【已解决】批处理BAT如何保留一定范围字符长度的行?

本帖最后由 elec 于 2014-7-7 23:35 编辑

现在有一个混乱的大文本。

每行字符范围从1~100不等,如何筛选出50~80字符长度的行呢?
作者: apang    时间: 2014-5-21 11:43

  1. @echo off & setlocal enabledelayedexpansion
  2. for /l %%a in (1 1 50) do set "re1=!re1!."
  3. for /l %%a in (1 1 80) do set "re2=!re2!."
  4. sed -r "/%re1%/^!d;/%re2%./d" a.txt > b.txt
复制代码

作者: terse    时间: 2014-5-21 13:20

sed 的话 这样呢
  1. @sed -nr "/^.{50}/,/^.{80}/p" a.txt
复制代码

作者: elec    时间: 2014-7-7 23:35

回复 3# terse


    sed好像办不到。gawk可以这样
  1. gawk "{if(length($0)<80 && length($0)>50) print $0}" 1.txt
复制代码
你在sed前面加一个@代表啥意思呢?
作者: terse    时间: 2014-7-8 01:08

回复 4# elec
这样呢?
  1. @sed -nr "/^.{50,80}$/p" a.txt
复制代码
@等同 @echo off
作者: CrLf    时间: 2014-7-8 02:21

回复 5# terse


    想请教下,-r 开关有什么作用呢?默认就是启用正则的呀
作者: elec    时间: 2014-7-8 07:37

本帖最后由 elec 于 2014-7-8 07:40 编辑

回复 6# CrLf


    -r, --regexp-extended
        use extended regular expressions in the script.

    不用-r的话, | & + { } ()要转义的
  1. sed -n "/^.\{10,40\}$/p" a.txt
复制代码





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