需要帮助将一个标签替换为另一个标签

需要帮助将一个标签替换为另一个标签

有人能帮助我了解 EmEditor Macro 吗?

id="131"
        restype="x-p"
        phase-name="pretrans"><source>Good morning</source><seg-source><mrk
            mtype="seg"
            mid="1">Good morning</mrk></seg-source><target><mrk
            mtype="seg"
            mid="1"
            MadCap:segmentStatus="Untranslated"
            MadCap:matchPercent="0" /></target></trans-unit>

它会成为

id="131"
        restype="x-p"
        phase-name="pretrans"><source>Good morning</source><seg-source><mrk
            mtype="seg"
            mid="1">Good morning</mrk></seg-source><target><mrk
            mtype="seg"
            mid="1"
            MadCap:segmentStatus="Untranslated"
            MadCap:matchPercent="0" />Good morning</target>"> </trans-unit>

我有 5000 个文件,我需要批量运行这个宏,所以有人可以帮我做这个吗?

我想要代码在批处理文件中循环处理,源文本可以是任何内容。

答案1

当你处理大量文件时,你可能会非常注意。数量越多就越混乱。

此刻我无法帮助你Visual Basic或者EmEditor 宏但我可以给你另一种选择。

您可以安装一些类似 Linux环境如 CygWin、UnxUtils...,请参阅链接和可能性有没有类似 cmd.exe 的 sed 实用程序,或者您可以尝试在 Visual Basic 中翻译其后面的内容。

里程碑:

  • 指定一个唯一的键。在你的情况下应该是包含以下内容的行MadCap:matchPercent="0"
  • 检查您选择的项目是否不会包含其他项目不希望行。
    在 Linux 下你可以这样做:

    grep -e 'MadCap:matchPercent="0"' AllMyFiles           
        # It gives a lot of lines maybe more that the number of files
    grep -e 'MadCap:matchPercent="0"' AllMyFiles | sort -u 
        # sort -u unique ... if you are lucky it's only one. 
    

    您可以使用更受限制的密钥作为

    grep -e 'MadCap:matchPercent="0" /></target></trans-unit>' AllMyFiles 
    
  • 现在您可以开始处理单个文件,例如MadCap:matchPercent="0" /></target></trans-unit>用您的字符串替换该行。
    我甚至编写了一个小脚本,因为它更容易阅读。让我们调用它Change_One.sh并用 调用它/bin/bash Change_One.sh Myfile.txt。在复制的文件上尝试一下:

    #!/bin/bash
    C="Good morning"                    # This is what you want to add
    A='MadCap:matchPercent="0" \/><\/target><\/trans-unit>'
    B='MadCap:matchPercent="0" \/>'${C}'<\/target>\"> <\/trans-unit>'
    sed  -i -e "s/${A}/${B}/g" $1       # Here you do it 
    
  • 当一切正常后,你可以继续迭代所有文件

    #!/bin/bash 
    searchFiles='*.txt'                 # Here the 5000 files  
    C="Good morning"                    # This is what you want to add
                                        # $AA the not escaped string
                                        # $A and $B the escaped strings
    
    AA='MadCap:matchPercent="0" /></target></trans-unit>'
    A='MadCap:matchPercent="0" \/><\/target><\/trans-unit>'
    B='MadCap:matchPercent="0" \/>'${C}'<\/target>\"> <\/trans-unit>'
    
    for i in `grep -l -E "$AA"  $searchFiles`; do
      # echo "# Working on file " $i    # uncomment this line to test iterations
      sed -i -e "s/${A}/${B}/g" "$i"    # comment this line to test iterations
    done
    

    注意:使用grep您可以搜索文件内的字符串,使用-l您只打印文件名,使用`command`您可以执行脚本内的命令,并且它的输出(匹配的文件名)由循环使用for ... do done

相关内容