如果空格位于引号之间,我想创建一个批处理来用空格替换空格。然后我想从文本文件中删除引号。我怎么能做到这一点?
所以我想改变这样的一行:
2016-01-11 14:45:09 Server 127.0.0.1 GET /global/images/logo_small.jpg - 80 - 173.252.120.117 "facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)" "-" www.vietnam.ttu.edu 200 200 200 1868 0
到这一行。
2016-01-11 14:45:09 Server 127.0.0.1 GET /global/images/logo_small.jpg - 80 - 173.252.120.117 facebookexternalhit/1.1+(+http://www.facebook.com/externalhit_uatext.php) - www.vietnam.ttu.edu 200 200 200 1868 0
由于
答案 0 :(得分:0)
@ECHO OFF
SETLOCAL
SET "sourcedir=U:\sourcedir"
SET "filename1=%sourcedir%\q34732271.txt"
FOR /f "usebackqdelims=" %%a IN ("%filename1%") DO ECHO %%a&SET "line="&CALL :process %%a
GOTO :EOF
:process
SET "addition=%~1"
IF not DEFINED addition ECHO %line:~1%&GOTO :eof
IF "%~1"==%1 (
REM quoted
SET "line=%line% %addition: =+%"
) ELSE (
SET "line=%line% %addition%"
)
shift
GOTO process
您需要更改sourcedir
的设置以适合您的具体情况。
我使用了一个名为q34732271.txt
的文件,其中包含我的测试数据。
echo %%a
在屏幕上显示您的一行数据,echo
例程中的:process
显示该行已处理。
批处理不是处理字符串的理想语言,因为它表现出对许多符号的敏感性。如果您乐意压缩空格字符串且源字符串不包含,
;
, tab %
或任何其他符号,则此过程应该有效cmd
专门对待。
答案 1 :(得分:0)
您可以使用JREPL.BAT来获得非常简洁有效的解决方案。 JREPL是一个基于纯脚本(JScript /批处理)的正则表达式文本处理实用程序,可以在XP之后的任何版本的Windows上运行。
/T
对于此解决方案,我使用y
选项,它与unix tr实用程序或sed \X
命令非常相似。
我定义了两个搜索词,第一个用于引号(/J
选项启用\ q转义序列),第二个用于空格。
/JBEGLN
选项将替换字符串视为JScript。引号的第一个替换字符串切换“q”变量TRUE或FALSE,并用空字符串替换引号。第二个替换字符串有条件地用加号或空格替换空格,具体取决于“q”变量的状态。
/F
选项在每行的开头将“q”变量初始化为FALSE。
/O -
选项指定输入文件,>>> p
array([1, 0, 2, 1])
>>> r
array([1, 0, 1, 1])
>>> p == r
array([ True, True, False, True], dtype=bool)
>>> (p == r).mean()
0.75
选项指定输出覆盖原始文件。
答案 2 :(得分:0)
这是一个纯batch-file解决方案,遍历文件line.txt
中每行中的字符,替换一对引号{{1}之间的所有 SPACE 通过""
签名并将结果存储在+
中。输入字符串可以包含任何字符,甚至是特殊字符:
text_new.txt