我想搜索&替换file.txt
中每行的结尾并删除之前的字符。
换句话说,我在每一行的末尾都有一个冗余的逗号,在将数据传递给Excel时会让我感到不安。
我无法删除所有逗号,因为大多数逗号都很有价值。我只需删除每行末尾的那些,因为它们会创建一个空白单元格。
我不介意使用PowerShell gc
命令。
答案 0 :(得分:1)
这是删除每行最后一个字符的最简单方法"使用批处理文件:
@echo off
setlocal EnableDelayedExpansion
(for /F "delims=" %%a in (file.txt) do (
set "line=%%a"
echo(!line:~0,-1!
)) > output.txt
此批处理文件有一系列限制:它删除以分号开头的空行和行,并从行中删除感叹号。每个限制都可以修复,引入一个修改,最终以与aschipfl的答案类似的代码结束,但这段代码可能足以满足您的需求。
答案 1 :(得分:0)
以下是一个PowerShell脚本,它将文件in.txt
作为输入,从每行中删除最后一个字符,然后将它们输出到out.txt
:
Get-Content "in.txt" | % { $_.Substring(0, ($_.Length - 1)) } | Out-File "out.txt"
添加一个简单的测试来检查您是否只删除逗号:
Get-Content "in.txt" | % {
if($_.Substring(($_.Length - 1), 1) -eq ",") {
$_.Substring(0, ($_.Length - 1))
} else {
$_
}
} | Out-File "out.txt"
答案 2 :(得分:0)
这是一个纯粹的batch-file解决方案:
以下代码段会移除file.txt
中每一行的最后一个字符,
,并将结果写入file_new.txt
:
@echo off
setlocal EnableExtensions
> "file_new.txt" (
for /F usebackq^ delims^=^ eol^= %%L in ("file.txt") do (
setlocal DisableDelayedExpansion
set "LINE=%%L"
setlocal EnableDelayedExpansion
if "!LINE:~-1!"=="," (
echo(!LINE:~,-1!
) else (
echo(!LINE!
)
endlocal
endlocal
)
)
endlocal
需要切换延迟环境变量扩展(请参阅setlocal /?
和set /?
寻求帮助),以避免出现某些特殊字符的问题。
上述方法会从文件中删除空行,因为for /F
会忽略它们。要避免这种情况,请使用以下脚本:
@echo off
setlocal EnableExtensions
> "file_new.txt" (
for /F delims^=^ eol^= %%L in ('findstr /N /R "^" "file.txt"') do (
setlocal DisableDelayedExpansion
set "LINE=%%L"
setlocal EnableDelayedExpansion
set "LINE=!LINE:*:=!"
if "!LINE:~-1!"=="," (
echo(!LINE:~,-1!
) else (
echo(!LINE!
)
endlocal
endlocal
)
)
endlocal
这使用findstr /N /R "^"
返回给定文件的每一行(甚至是空行)并在其前面添加行号加:
的事实。因此,for /F
没有任何行显示为空。插入行set "LINE=!LINE:*:=!"
以在输出之前从每行删除该前缀(所有内容直到第一个:
)。