Linuxコマンドラインを使用して.DOCXファイルの単語を置き換える方法は?

Linuxコマンドラインを使用して.DOCXファイルの単語を置き換える方法は?

シェルコマンドを使用して.docxファイルの単語を変更したいと思います。コマンドを試しましたが、sed動作しません。この問題に対する解決策を知っている人はいますか?

たとえば、ファイル内の単語(たとえばexp5)を変更し、それを別の単語()に置き換えたいとします。exp3exo.docx

答え1

それでは、ブランド固有の形式でコンテンツを交換したいですか?一見すると見えませんが、実際にはファイルを含むZIPファイルなので、古いdocx形式よりも新しい形式が優れています。docXML

したがって、答えは解凍することです。その後、ファイルを見て、どのファイルを呼び出したいかを見つけて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
}

関連情報