0

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

我正在使用的命令如下:

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

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

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

4

1 回答 1

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 ...

外壳不应与单引号内的材料混淆。将反斜杠加倍是处理反斜杠丢失问题的传统方法。如果其他任何一个都有效,则在上下文中使用 sed 脚本文件是多余的,但也可以防止 shell 弄乱 sed 脚本中的内容。

于 2012-06-04T14:12:18.673 回答