我的输入文件(input.txt)中有一个如下条目:
mcolWarrant||||||||| 0||Forwarded||
mcolWarrant||||||||| 0||Forwarded||
mcolWarrant||||||||| 0||Forwarded||
mcolWarrant|AW000015|||||0A009919|388|MILTON KEYNES| 7000||
我只想删除"0" ( 0)
和 之前的试用空格"7000"( 7000)
。如何使用批处理脚本来实现这一点?
答案1
您的问题非常不精确,因此我的回答假设如下:
- 您正在使用 Windows
- 文件的每一行包含以
|
- 您想从所有列中删除前导空格
- 您想使用 Windows 批处理脚本
使用纯批处理脚本修改文件可能非常困难。通常情况下,一些简单的“解决方案”在遇到常见情况时会失效。几乎总是有解决方法,但生成的批处理脚本通常会变得复杂且缓慢。
但有一个功能强大的混合 JScript/批处理实用程序,称为 REPL.BAT可以轻松解决大量文本处理问题。REPL.BAT 是纯脚本,可在任何 Windows 机器上运行(从 XP 开始)。它在 stdin 上执行正则表达式查找/替换,并将结果写入 stdout。只要您学习正则表达式,它就非常容易使用。
您的问题的一个棘手方面是第一列中的前导空格不在|
分隔符后面。正确的解决方案必须处理这种特殊情况。
以下两个命令将完成你的任务
type input.txt | repl "(^|\|) *" "$1" >input.txt.new
move /y "input.txt.new" "input.txt" >nul
|
对正则表达式进行简单的修改将允许它从每列中删除前导空格和尾随空格。此解决方案必须处理最后一列中尾随空格不在分隔符前面的特殊情况。
type input.txt | repl "(^|\|) *| *($|\|)" "$1$2" >input.txt.new
move /y "input.txt.new" "input.txt" >nul