有没有办法在bash脚本中使用sed从microsoftword文档中删除文本?

有没有办法在bash脚本中使用sed从microsoftword文档中删除文本?,bash,shell,sed,indexing,Bash,Shell,Sed,Indexing,我需要从创建一本书的MS Word文档中删除一堆索引位置。显示隐藏文本后,所有索引位置的格式为{XE“somethinghere”}。我的问题是sed是否能够删除文本,即使它不是逐行文件?Word文档有文本框、图表等,因此我想知道sed是否能够用零替换XE术语,从而删除特定的索引位置 以下是我目前的代码: #!/bin/bash echo Enter the term you wish to remove from the index: read term prefix="XE" suffix

我需要从创建一本书的MS Word文档中删除一堆索引位置。显示隐藏文本后,所有索引位置的格式为{XE“somethinghere”}。我的问题是sed是否能够删除文本,即使它不是逐行文件?Word文档有文本框、图表等,因此我想知道sed是否能够用零替换XE术语,从而删除特定的索引位置

以下是我目前的代码:

#!/bin/bash

echo Enter the term you wish to remove from the index:
read term
prefix="XE"
suffix="\"$term\""
newterm="$prefix $suffix"
echo $newterm   

for file in $(find ./ -name "*.doc"); do
  filename=${file:3}
  echo $filename
  sed "s/$newterm//" "$filename"
  echo Success  
done
谢谢

这就是你的意思吗

$ cat file
aslkdalsdmkaldmkaslfmdkalmkal{ XE "somethinghere" }amskldmakldmakl{ XE "otherthinghere" }alskjdkaldjakl
$ sed 's/\({ *XE *\)"[^"]*" *\(}\)/\1\2/g' file
aslkdalsdmkaldmkaslfmdkalmkal{ XE }amskldmakldmakl{ XE }alskjdkaldjakl
如您所见,
{XE}
中引用的部分已使用全局替换删除


更新 如果要完全删除该节,则更简单:

sed 's/{ *XE[^}]*}//g' file
这就消除了

  • {
  • 任意数量的空格
  • XE
  • }
  • }

有没有一种方法可以让我用它来完全消除文件中的{XE}?不要抱太大希望。大多数unix工具(包括sed)都是为具有Ctrl-J字符分隔每行数据的文件而设计的,对其他Ctrl字符的支持有限,不支持空字符,也不支持二进制数据。当我刚刚查看docx文件时,我还看到了Uni-code字符。因此,可能有一些版本的sed支持这一点,但您必须使用正确的env vars LANG=??etc(在此处搜索示例)。你最好弄清楚如何使用Word Basic或MS Windows Basic的一个变体来完成你需要的工作。祝你好运