我有一个txt文件包含一些具有常量结构的行,
例如:
My Line is : Hi. This is row no.1.
My Line is : Hi. This is row no.2
My Line is : Hi. This is row no.3.
我想创建一个包含相同行的新文件,
但要删除特定子字符串之前的所有字符(例如:“Hi”),
以及此行的最后一个特定字符(例如:“。”),仅在存在时。
我期望的最终txt文件是:
Hi. This is row no.1
Hi. This is row no.2
Hi. This is row no.3
我该怎么做?
答案 0 :(得分:0)
在批处理中,使用SET
命令完成字符串替换和子字符串提取。使用set /?
或help set
进行查找。但是,使用SET
时,字符串中可能存在一些问题,包括!
,因为此解决方案使用延迟扩展。有些方法不会使用延迟扩展,但如果没有您正在使用的字符串的真实示例,我不确定您是否需要它们。
字符串替换看起来像这样。
%VARIABLE:original=replacement%
使用延迟扩展,允许为for
中的每次迭代确定变量值,而不是在整个for
块的开头确定一次,将%
替换为!
。
查看HELP SET
子字符串扩展的示例;根据您是从字符串的开头还是结尾进行索引,它们中有许多。
根据您提供的示例数据和我上面的评论,这是一个解决方案。对于test1.txt中的每一行,它处理它并将其输出到output.txt。
@echo off & setlocal enabledelayedexpansion
for /f "delims=" %%a in (test1.txt) do (
set line=%%a
set line=!line:My Line is : =!
if "!line:~-1!"=="." set line=!line:~0,-1!
>> output.txt echo !line!
)
答案 1 :(得分:-1)
cut
cut -f2 -d:infile> OUTFILE
但是留下了尾随点,
可以管那些东西来修剪它
或尝试sed
sed 's/.*:\(.*\)\.$/\1/g' infile > outfile
但是真的希望最终的点在那里。
sed 's/.*: \(.*\)/\1/g;s/\.$//g' infile > outfile
似乎这样做