[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

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

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

每行字符范围从1~100不等,如何筛选出50~80字符长度的行呢?

  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
复制代码

TOP

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

TOP

回复 3# terse


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

TOP

回复 4# elec
这样呢?
  1. @sed -nr "/^.{50,80}$/p" a.txt
复制代码
@等同 @echo off

TOP

回复 5# terse


    想请教下,-r 开关有什么作用呢?默认就是启用正则的呀

TOP

本帖最后由 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
复制代码

TOP

返回列表