首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >批量查找和复制行

批量查找和复制行
EN

Stack Overflow用户
提问于 2011-04-11 00:16:01
回答 1查看 1.4K关注 0票数 1

我需要剥离文本文件的一部分,并将其写入另一个文本文件。剥离后的文本文件也应保存。

之前:

代码语言:javascript
运行
复制
Original.txt = "<xml><something>values</something><script>TEXT-TO-DELETE</script></xml>"

之后:

代码语言:javascript
运行
复制
Original.txt = "<xml><something>values</something><script></script></xml>"

Original_script.txt = "TEXT-TO-DELETE"

。。这是一个多行文件,所以script部分跨越了很多行。

我尝试了从发布的脚本,但永远不能理解语法。

代码语言:javascript
运行
复制
"@echo off & setlocal 
set "Data=D:\Original.txt" 
set "Bak=%Data%.bak" 
move "%Data%" "%Bak%" 
for /f "usebackq delims=" %%i in ("%Bak%") do set "LINE=%%i" & call :ProcessLine 
REM del "%Bak%" 
goto :eof 
:ProcessLine 
echo %LINE%>>"%Data%"
echo %LINE%|findstr /b "<script>">nul || goto :eof 
goto :eof"

这应该适用于windows计算机..(较新的操作系统支持)

编辑:因为我不能在我自己的线程上回答,所以我在这里回答:

谢谢你的回答。不幸的是,我不想为此使用共享软件。我正在用另一种语言解析,我只需要去掉它。

这是一个可笑的3行代码:

代码语言:javascript
运行
复制
file={"p1.txt","p2.txt","p1.txt"}
find={"<search>","</search>,"<xml>"}
count=1
foreachline in file[count] print line to file[count]
if find[count] in line then count++

或者类似的。如果没有1000种方式/风格的脚本,我自己就能搞清楚。只是想来点可口的药能让它休息一分钟。

EN

回答 1

Stack Overflow用户

发布于 2011-04-11 20:38:12

我认为带有CLI的XSLT处理器是这里最合适的工具。AltovaXML2011是我现在使用最频繁的一个。

然后,脚本可以是这样的,将script元素的内容提取到Original_script文件中,然后更新原始文件:

代码语言:javascript
运行
复制
@echo off
set orig="D:\Original.txt"
set script="D:\Original_script.txt"
set backup="D:\Original_backup.txt"
set xsltprocessor="D:\AltovaXML.exe"
move %orig% %backup%
::extract scripts
%xsltprocessor% -xslt1 "D:\ExtractScripts.xslt" -in %backup% -out %script%
::update original
%xsltprocessor% -xslt1 "D:\UpdateOriginal.xslt" -in %backup% -out %orig%
::del %backup%

ExtractScripts.xslt如下所示,它提取所有script元素的内容(添加换行符):

代码语言:javascript
运行
复制
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="text" omit-xml-declaration="yes"/>
    <xsl:template match="/">
        <xsl:apply-templates select="//script"/>
    </xsl:template>
    <xsl:template match="//script">
        <xsl:apply-templates/>
        <xsl:text>
</xsl:text>
    </xsl:template>
</xsl:stylesheet>

由于UpdateOriginal.xslt看起来像这样,它只复制了整个原始文件,但忽略了所有script元素的内容(已经单独提取):

代码语言:javascript
运行
复制
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/>
    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>
    <xsl:template match="//script">
        <xsl:copy/>
    </xsl:template>
</xsl:stylesheet>

您可以选择在以后保留或删除备份文件。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5613047

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档