Sed在cygwin问题

时间:2012-06-04 11:54:58

标签: sed cygwin

我正在编写一个sed脚本,用于选择包含[20

的字符串

我使用的命令如下:

sed -n "/\[20/p" "C:\test_scripts\new1.txt"

这与mks工具包中的sed一起使用。但是,当我尝试在Cygwin中使用sed时,我收到以下错误:

sed: -e expression #1, char 6: unterminated address regex

1 个答案:

答案 0 :(得分:2)

诊断

猜测,Cygwin shell正在删除sed脚本中的反斜杠,因此sed命令只会看到/[20/p,它会生成您看到的错误消息。您可以使用以下任一方式确认:

set -x
sed -n "/\[20/p" ...
set +x

或者:

echo sed -n "/\[20/p" ...

这些应该显示sed程序看到的内容(set -x表示法可能将整个参数用单引号括起来。)

如何解决?

有几种可能性,其中大部分应该有效:

  • sed -n '/\[20/p' ...
  • sed -n "/\\[20/p' ...
  • 编辑文件(sed.script)以包含/\[20/p(一行),然后运行:sed -n -f sed.script ...

shell不应该混淆单引号内的材料。加倍反斜杠是处理反斜杠丢失问题的传统方法。如果其他任何一个工作,使用sed脚本文件在上下文中是过度的,但也会阻止shell搞乱sed脚本中的内容。