如何使用 Linux 命令行替换 .DOCX 文件中的单词?

如何使用 Linux 命令行替换 .DOCX 文件中的单词?

我想使用 shell 命令更改 .docx 文件中的单词。我尝试使用该sed命令,但它不起作用。有谁知道这个问题的解决方案?

例如,我想更改一个单词(例如exp5)并将其替换为exp3文件中的另一个单词()exo.docx

答案1

那么,您想以特定品牌的格式替换内容吗?乍一看,它看起来很糟糕,但新docx格式比旧格式要好一些doc,因为它实际上是一个包含文件的 ZIP 文件XML

因此,答案在于解压缩它,然后您必须翻阅文件并找出要调用的文件sed并再次将其压缩。

查看word/document.xmlZIP 文件中的文件。

答案2

试试这个脚本:

FILE=$1    
RETPATH=`pwd`    
rm -rf /var/tmp/docx    
mkdir /var/tmp/docx    
cp $FILE /var/tmp/docx
cd /var/tmp/docx    
mkdir tmp
unzip $FILE -d tmp
cd tmp/word
sed -i "s/${2}/${3}/" document.xml
cd ..
zip -r ../${FILE} *
cp /var/tmp/docx/${FILE} ${RETPATH}
cd $RETPATH
rm -rf /var/tmp/docx 

并按如下方式调用脚本:

./repdocx FILE_NAME OLD_STRING NEW_STRING

答案3

修改和清理施劳本卡尔回答(必须在docx目录中):

find_and_replace() {
    FILE=$1
    FIND=$2
    REPLACE=$3

    unzip "$FILE" -d tmp #unzip
    sed -i '' -e "s/$FIND/$REPLACE/g" tmp/word/document.xml #find/replace
    cd tmp && zip -r ../"$FILE" * && cd .. #zip
    rm -rf tmp
}

相关内容