标题: [文本处理] [已解决]批处理如何在文本中非数字的行首加固定内容? [打印本页]
作者: mrhxn 时间: 2011-4-27 11:16 标题: [已解决]批处理如何在文本中非数字的行首加固定内容?
本帖最后由 mrhxn 于 2011-4-27 18:27 编辑
比如文本:
111
地地地地
2222
五五
我的意思是在非数字的行首加固定内容:
111
宋体地地地地
2222
宋体五五
请问,如何实现?
作者: Batcher 时间: 2011-4-27 11:25
- sed -i "/[^0-9]/ s/^/宋体/" a.txt
复制代码
http://bbs.bathome.net/thread-3981-1-1.html
作者: hanyeguxing 时间: 2011-4-27 11:31
- @echo off&setlocal enableDelayedExpansion
- (for /f "delims=" %%a in (a.txt) do (
- set "a=%%a"
- for /l %%b in (0,1,9) do if defined a set "a=!a:%%b=!"
- if defined a (echo;宋体%%a) else echo;%%a
- ))>$
- move $ a.txt
复制代码
作者: batman 时间: 2011-4-27 12:14
3# hanyeguxing
如果文本中有这样的情况出现呢:
我 他
我123 他456
作者: batman 时间: 2011-4-27 12:20
本帖最后由 batman 于 2011-4-27 12:32 编辑
- @echo off&setlocal enabledelayedexpansion
- (for /f "delims=" %%a in (a.txt) do (
- set "str=%%a"
- for /l %%b in (0,1,9) do set "str=!str:%%b=!"
- if "%%a" equ "!str!" set "a=宋体"
- echo !a!%%a&set "a="
- ))>$
- move $ a.txt
复制代码
作者: applba 时间: 2011-4-27 12:24
本帖最后由 applba 于 2011-4-27 17:09 编辑
请问楼主你的数字行会不会是0开头的?
作者: hanyeguxing 时间: 2011-4-27 12:30
本帖最后由 hanyeguxing 于 2011-4-27 12:31 编辑
5# batman
1, for /l %%b in (0,1,9) do "set str=!str:%%b=!" 引号打错位置
2, move /y $ a.txt 默认的copycmd=y
3, 我理解他所说的数字行是要求纯数字行,即只由0-9构成
作者: batman 时间: 2011-4-27 12:33
7# hanyeguxing
多谢提醒,但你总要考虑行中有空格,等默认分隔符的存在吧。。。
作者: hanyeguxing 时间: 2011-4-27 12:35
8# batman
哈哈,他没说的我就不去考虑。。。。。。。
作者: batman 时间: 2011-4-27 12:37
9# hanyeguxing
也是,具体问题具体代码。。。
作者: CrLf 时间: 2011-4-27 12:52
- @echo off&setlocal enabledelayedexpansion
- (for /f "delims=" %%a in (1.txt) do (
- for /f "delims=0123456789" %%b in ("%%a@") do if "%%b"=="@" (echo;%%a) else echo 宋体%%a
- ))>2.txt
- pause
复制代码
作者: mrhxn 时间: 2011-4-27 13:14
谢谢各位,但数字后有冒号的就不行了,比如:
1:
它也给加上了,只要行首是非数字的就加。
作者: Hello123World 时间: 2011-4-27 13:14
3# hanyeguxing
if defined a (echo;宋体%%a) else echo;%%a
不明白,能解答一下吗?这里变量a无论如何都是定义的啊,为什么要加else
作者: CrLf 时间: 2011-4-27 13:22
谢谢各位,但数字后有冒号的就不行了,比如:
1:
它也给加上了,只要行首是非数字的就加。
mrhxn 发表于 2011-4-27 13:14
顶楼怎么不用更明了的例子讲清楚...到底这里说的非数字是匹配整行还是只匹配行首?
作者: mrhxn 时间: 2011-4-27 13:26
本帖最后由 mrhxn 于 2011-4-27 13:28 编辑
顶楼怎么不用更明了的例子讲清楚...到底这里说的非数字是匹配整行还是只匹配行首?
zm900612 发表于 2011-4-27 13:22
只匹配号首,问题是,行首是1:仍然给加上了。
1:
2
批处理之家
运行后变成这样:
宋体1:
2
宋体批处理之家
我的意思是:
1:
2
宋体批处理之家
作者: CrLf 时间: 2011-4-27 13:35
你自己不说,谁会知道“:”也算在内- @echo off&setlocal enabledelayedexpansion
- (for /f "delims=" %%a in (1.txt) do (
- for /f "delims=0123456789::" %%b in ("%%a@") do if "%%b"=="@" (echo;%%a) else echo 宋体%%a
- ))>2.txt
- pause
复制代码
作者: hanyeguxing 时间: 2011-4-27 13:44
本帖最后由 hanyeguxing 于 2011-4-27 13:54 编辑
文本不太大时:- @echo off&set "n=a.txt"
- for /f "tokens=1* delims=:" %%a in ('findstr /nb [0-9] "%n%"') do set #%%a==
- (for /f "tokens=1* delims=:" %%a in ('findstr /n .* "%n%"') do if not "%%b"=="" (
- if defined #%%a (echo;%%b) else echo;宋体%%b
- ))>$
- move $ "%n%"
复制代码
作者: mrhxn 时间: 2011-4-27 13:49
文本不大时:@echo off&set "n=a.txt"
for /f "tokens=1* delims=:" %%a in ('findstr /nb [0-9] "%n%"') do set #%%a==
(for /f "tokens=1* delims=:" %%a in ('findstr /n .* "%n%"') do if defined #%%a (echo; ...
hanyeguxing 发表于 2011-4-27 13:44
基本可以实现,但是有空行的地方加了宋体,如何处理空行呢?
作者: hanyeguxing 时间: 2011-4-27 13:52
本帖最后由 hanyeguxing 于 2011-4-27 14:01 编辑
18# mrhxn
加上 if "%%b"=="" 判断空行了
如果不保留空行,使用17楼;如果要保留空行,则:- @echo off&set "n=a.txt"
- for /f "tokens=1* delims=:" %%a in ('findstr /nb [0-9] "%n%"') do set #%%a==
- (for /f "tokens=1* delims=:" %%a in ('findstr /n .* "%n%"') do if "%%b"=="" (echo;) else (
- if defined #%%a (echo;%%b) else echo;宋体%%b
- ))>$
- move $ "%n%"
复制代码
作者: hanyeguxing 时间: 2011-4-27 14:05
13# Hello123World
for /l %%b in (0,1,9) do if defined a set "a=!a:%%b=!"
当行为纯数字时,!a!将被删空,这里的 if defined a 是防止对空删除的
if defined a (echo;宋体%%a) else echo;%%a
当行为纯数字时,!a!已被删空,所以变量就不存在、未被定义
作者: mrhxn 时间: 2011-4-27 14:36
谢谢hanyeguxing,可以实现。
作者: batman 时间: 2011-4-27 15:55
本帖最后由 batman 于 2011-4-27 15:58 编辑
- @echo off&setlocal enabledelayedexpansion
- (for /f "delims=" %%a in (a.txt) do (
- set "str=%%a"&set "a=宋体"
- if "!str:~,1!" geq "0" if "!str:~,1!" leq "9" set "a="
- echo !a!%%a
- ))>$
- move $ a.txt
- start a.txt
复制代码
作者: terse 时间: 2011-4-29 01:39
- 直接 IF
- @echo off
- for /f "delims=" %%i in (a.txt) do (
- if %%i lss a (echo %%i)else echo 宋体%%i
- )
- pause
复制代码
作者: CrLf 时间: 2011-4-29 12:34
23# terse
好办法,不过筛选不够严格,而且建议用"%%i"
作者: mrhxn 时间: 2011-4-29 15:37
22# 23#
基本都可以,就是有一个问题,不能原样输出,比如有空行的话,就不行了。
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |