标题: [文本处理] 【已解决】批处理BAT如何保留一定范围字符长度的行? [打印本页]
作者: elec 时间: 2014-5-21 08:14 标题: 【已解决】批处理BAT如何保留一定范围字符长度的行?
本帖最后由 elec 于 2014-7-7 23:35 编辑
现在有一个混乱的大文本。
每行字符范围从1~100不等,如何筛选出50~80字符长度的行呢?
作者: apang 时间: 2014-5-21 11:43
- @echo off & setlocal enabledelayedexpansion
- for /l %%a in (1 1 50) do set "re1=!re1!."
- for /l %%a in (1 1 80) do set "re2=!re2!."
- sed -r "/%re1%/^!d;/%re2%./d" a.txt > b.txt
复制代码
作者: terse 时间: 2014-5-21 13:20
sed 的话 这样呢- @sed -nr "/^.{50}/,/^.{80}/p" a.txt
复制代码
作者: elec 时间: 2014-7-7 23:35
回复 3# terse
sed好像办不到。gawk可以这样- gawk "{if(length($0)<80 && length($0)>50) print $0}" 1.txt
复制代码
你在sed前面加一个@代表啥意思呢?
作者: terse 时间: 2014-7-8 01:08
回复 4# elec
这样呢?- @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的话, | & + { } ()要转义的- sed -n "/^.\{10,40\}$/p" a.txt
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |