sed 's/^#//g' < kam_account_calls.txt > kam_account_calls1.txt
此命令从行的开头删除#。
请告诉我如何在Windows命令shell中采用相同的功能。
答案 0 :(得分:2)
与此主题中的某些声音相反,这可以通过cmd
完成,甚至可以直截了当地说明:
@echo off
rem enable some niceties we need here
setlocal enableextensions enabledelayedexpansion
rem loop through the file
for /f "delims=" %%x in (kam_account_calls.txt) do call :process %%x
endlocal
goto :eof
rem subroutine to remove # if present:
:process
set line=%*
rem if the first character of the line is #
if [%line:~0,1%]==[#] (
rem then throw it away
echo.!line:~1!
) else (
rem else just output the line
echo.!line!
)
goto :eof
这将遍历文件并输出删除了前导#
字符的所有行。
它不能在普通的DOS中完成,这是正确的(虽然我不是太确定,有些人在那里做了惊人的事情)。但几乎没有人在他的问题中包含DOS实际上意味着 DOS而不是Windows命令处理器cmd.exe
。
限制:
<
或>
。%random%
或%cd%
。请记住这些,看看这是否会对您的文本文件造成影响。
可以找到代码和示例文件here。
答案 1 :(得分:0)
DOS中没有开箱即用的功能,但您可以随时使用sed的众多端口之一,例如this one。
编辑回答评论:由于DOS批处理文件只执行DOS命令(CMD的内部命令或程序),你不能不添加像sed这样的工具。
编辑“我们不能使用CMD”:不,不是在DOS下 - CMD没有读取文件并操纵它们的功能。你要么必须使用像sed或awk这样的现有程序,要么自己写一个。抱歉。甚至Unix / Linux也没有内置功能,但它们将sed和awk打包成开箱即用的程序。这不是DOS的情况。
显然,Windows使用环境变量(JohannesRössel的帽子)添加扩展来做这样的事情。我的DOS知道我显然已经变老了。
答案 2 :(得分:0)
你可以使用vbscript
Set objFS=CreateObject("Scripting.FileSystemObject")
strFile = "c:\test\file"
Set objFile = objFS.OpenTextFile(strFile)
Do Until objFile.AtEndOfStream
strLine=objFile.ReadLine
If Mid(strLine,1,1) = "#" Then
strLine = Mid(strLine,2)
End If
WScript.Echo strLine
Loop
输出
C:\test>more file
# this is a comment
this is one line #
blahb labh
C:\test>cscript /nologo test.vbs
this is a comment
this is one line #
blahb labh
答案 3 :(得分:0)
安装Cygwin,然后您就可以直接使用 sed 。
(不是Windows命令shell,我知道,更像是类固醇上的命令shell)