批量替换文件中引号之间的空格,然后删除所有引号

时间:2016-01-11 22:25:29

标签: windows batch-file

如果空格位于引号之间,我想创建一个批处理来用空格替换空格。然后我想从文本文件中删除引号。我怎么能做到这一点?

所以我想改变这样的一行:

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

由于

3 个答案:

答案 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)

这是一个纯解决方案,遍历文件line.txt中每行中的字符,替换一对引号{{1}之间的所有 SPACE 通过""签名并将结果存储在+中。输入字符串可以包含任何字符,甚至是特殊字符:

text_new.txt