Board logo

标题: [文本处理] [已解决]求助批处理删除TXT文本 书名号之外的内容 [打印本页]

作者: lj670    时间: 2024-10-27 14:36     标题: [已解决]求助批处理删除TXT文本 书名号之外的内容

当前文件夹内00.txt文件,文本内容若干行,删除每行书名号《》之外的内容,每行只有一个《》,输出最好是修改原文件
示例:
10《一场梦一场秋雨》20句
162《远方的人》长短
20《曾经来过》保留
处理后
《一场梦一场秋雨》
《远方的人》
《曾经来过》
作者: Five66    时间: 2024-10-27 16:20

编码全部ansi
运行后会生成新文件OO.txt
  1. @echo off&chcp 936
  2. (
  3. for /f "eol=? delims=" %%a in (00.txt) do (
  4. set "line=%%a"
  5. setlocal enabledelayedexpansion
  6. set line=《!line:*《=!
  7. for /f "tokens=1 delims=》" %%b in ("!line!") do (
  8. endlocal
  9. set "line=%%b》"
  10. )
  11. if "!nil!" == "%nil%" endlocal
  12. setlocal enabledelayedexpansion
  13. echo:!line!
  14. endlocal
  15. ))>>OO.txt
  16. echo done!!!
  17. pause&exit/b
复制代码

作者: 银八    时间: 2024-10-27 17:22

针对楼主所说每行只有一组《》,可用这段代码试下(ASCII)
bat和txt放同一路径下直接运行
  1. @echo off&chcp 65001
  2. for /f "tokens=1,2,3 delims=《》" %%a in (00.txt) do echo 《%%b》>>新文件.txt
复制代码

作者: aloha20200628    时间: 2024-10-27 19:13

本帖最后由 aloha20200628 于 2024-10-27 19:16 编辑

回复 1# lj670

cmd窗口一行流》须在本坛第三方下载 sed.exe http://bcn.bathome.net/s/tool/index.html?key=sed 置于 00.txt 同目录运行...
  1. sed -r "s/[^《》]*《([^《》]+)》[^《》]*/《\1》/g" 00.txt
复制代码

作者: lj670    时间: 2024-10-27 19:39

回复 4# aloha20200628 下载4.9版sed,bat和文本为ANSI,运行一闪而过没有作用。
作者: lj670    时间: 2024-10-27 19:43

回复 3# 银八 运行后文本只有《》了,书名号里的文字也没有了
作者: lj670    时间: 2024-10-27 19:48

回复 2# Five66 运行后生成的新文件是对的,请问大神能否直接修改原文件呢?
作者: 77七    时间: 2024-10-27 20:26

  1. @echo off
  2. rem 批处理和文本全部保存为ansi编码
  3. cd /d "%~dp0"
  4. (for /f "useback delims=" %%a in ("00.txt") do (
  5. for /f "tokens=2 delims=《》" %%b in ("#%%a#") do (
  6. echo 《%%b》
  7. )
  8. )) > $
  9. move $ "00.txt"
  10. pause
复制代码

作者: lj670    时间: 2024-10-27 21:34

回复 8# 77七 运行后,完美,谢谢!
作者: aloha20200628    时间: 2024-10-27 22:07

回复 5# lj670

已用一楼的示例文件 00.txt 测试通过... 楼主用以下代码能看见屏显的正确结果吗?
  1. sed -r "s/[^《》]*《([^《》]+)》[^《》]*/《\1》/g" "00.txt"&echo,&pause
复制代码

作者: lj670    时间: 2024-10-27 22:45

回复 10# aloha20200628 频显是对的,但没有输出,原文件没变
作者: aloha20200628    时间: 2024-10-27 23:02

本帖最后由 aloha20200628 于 2024-10-27 23:07 编辑

回复 11# lj670

还是用一行流解决吧...
  1. sed -r "s/[^《》]*《([^《》]+)》[^《》]*/《\1》/g" "00.txt">"_" & move /y "_" "00.txt"
复制代码

作者: lj670    时间: 2024-10-27 23:21

回复 12# aloha20200628 这个完美!!👍👍
作者: qixiaobin0715    时间: 2024-10-28 08:20

  1. @echo off
  2. (for /f "tokens=1-2 delims=《》" %%a in (00.txt) do if "%%b"=="" (echo,《%%a》) else echo,《%%b》)>temp
  3. del 00.txt
  4. ren temp 00.txt
  5. pause
复制代码

作者: hfxiang    时间: 2024-10-28 10:30

回复 12# aloha20200628

尝试用-i参数,看是不是可简化如下
[code]
sed -i -r "s/^.*(《.*》).*$/\1/" 00.txt
作者: aloha20200628    时间: 2024-10-28 12:46

回复 15# hfxiang

如源文件中每行包含多个《...》字段,用15楼代码匹配最后一个《...》字段,用12楼代码则匹配所有《...》字段,因实况自取吧...

作者: lj670    时间: 2024-10-28 19:23

回复 15# hfxiang 可以可以,测试完美,这个最简化,厉害!大神能否再写一个,还是这个文本,只删除《左书名号之前的内容,其他的保留,
谢谢!
例如:
162《远方的人》长短
20《曾经来过》保留
运行删除后:
《远方的人》长短
《曾经来过》保留
作者: lj670    时间: 2024-10-28 19:32

回复 14# qixiaobin0715 完美可用,分没有了,明天再给加分!大神能否再写一个,还是这个文本,只删除《左书名号之前的内容,其他的保留,
谢谢!
例如:
162《远方的人》长短
20《曾经来过》保留
运行删除后:
《远方的人》长短
《曾经来过》保留
作者: lj670    时间: 2024-10-28 19:34

回复 16# aloha20200628
谢谢,受教了!
作者: qixiaobin0715    时间: 2024-10-29 08:39

本帖最后由 qixiaobin0715 于 2024-10-29 08:57 编辑

回复 18# lj670
加不加分倒是无所谓,积分又没什么用处, 解决问题才是关键:
  1. @echo off
  2. (for /f "tokens=1* delims=《" %%a in (00.txt) do (
  3.     if "%%b"=="" (
  4.         echo,《%%a
  5.     ) else (
  6.         echo,《%%b
  7.     )
  8. ))>temp
  9. del 00.txt
  10. ren temp 00.txt
  11. pause
复制代码
未经测试。
上面代码只能处理每行都存在书名号的文本,如果存在不含书名号的行,此行的结果可能会有误差,代码就需要修改。
作者: aloha20200628    时间: 2024-10-29 10:48

本帖最后由 aloha20200628 于 2024-10-29 11:29 编辑


假设源文件 00.txt 中包含 1-n 对《...》

一。以下代码删除第一个《 字符之前的内容,覆写源文件...
  1. sed -i "s/[^《》]*《/《/" 00.txt
复制代码
二。以下代码删除最后一个 》字符之后的内容,覆写源文件...
  1. sed -i "s/》[^《》]*$/》/" 00.txt
复制代码
三。以下代码删除每对《...》以外的所有内容,覆写源文件...
  1. sed -i -r "s/[^《》]*《([^《》]+)》[^《》]*/《\1》/g" 00.txt
复制代码

作者: hfxiang    时间: 2024-10-29 19:30

回复 17# lj670

呵呵,可以的
  1. sed -i -r "s/^.*(《.*).*$/\1/" 00.txt
复制代码

作者: lj670    时间: 2024-10-31 15:30

回复 20# qixiaobin0715

感谢,运行完美!
作者: lj670    时间: 2024-10-31 15:32

回复 21# aloha20200628

这个太全面了,都完美运行,感谢感谢!
作者: lj670    时间: 2024-10-31 15:34

回复 22# hfxiang

完美可用,感谢感谢!分加完了,改天在加。




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