sed没有在shell脚本中激活

时间:2011-10-04 13:00:38

标签: shell sed

我的sed调用似乎都没有在文档上激活。我检查并仔细检查了正则表达式,它适用于我可以使用的所有文本编辑器(Geany,Gedit,Notepad ++),任何人都对我做错了什么有任何想法?

#!/bin/sh
clear
antiword q.doc > q.txt
sed -i -e's/\[.*\]//g' q.txt # replace [...] with nothing
sed -i -e's/^[ \t]+[o][ \t]//g' q.txt # replace old word UL with nothing
sed -i -e's/^[ \t]+[•][ \t]//g' q.txt # replace old word UL with nothing

奖励标记,用于向我展示如何删除文件中的额外退货,以便之前有2个或更多的元素之间只有1行。

2 个答案:

答案 0 :(得分:3)

看起来您在编写正则表达式时考虑了Perl语法或扩展正则表达式语法,但sed使用basic regular expressions。根据您使用的sed的实现,最简单的解决方案是告诉sed使用带有-E(Mac OS X)或-r(GNU sed)标志的扩展正则表达式。您可能还需要将\t设置为文字标签。

答案 1 :(得分:1)

如果您使用的是GNU-sed:

第1行)在这里运行良好(删除成对的方括号及其间的所有内容)。

第2行和第3行)(

  

来自[ 列表 ]的联机帮助页:字符$,,。,[和\}通常在列表中不是特殊的。   例如,[*]匹配'\'或'',因为\不匹配   特别在这里。

解决方案:代替[ \t]代码:[:space:]