在 csh 脚本中的 sed 调用中找不到事件

在 csh 脚本中的 sed 调用中找不到事件

我尝试了上面给出的代码删除大括号之间的文本

但是我在 sed 事件中遇到了这个不同的错误。

文件包含:

This is {
{the multiline
text} file }
that wants
{ to {be
changed}
} anyway.

sed ':again;$!N;$!b again; s/{[^}]*}//g' file

锻炼中可能出了什么问题?

错误

N: Event not found.

答案1

你必须逃脱!以防止csh/tcsh执行历史扩展。尽管您!用单引号编写,但他们仍然进行历史扩展。

尝试:

sed ':again;$\!N;$\!b again; s/{[^}]*}//g' file

或者您可以编写一个脚本来调用-f script.sed(阅读sed 常见问题解答)。

答案2

我不熟悉,tcsh但这听起来像是一个历史扩展问题。在bash单引号中可以防止历史扩展,也许在tcsh它们中不会。

您可以禁用历史记录扩展(不过,我不知道如何做到这一点;bash这是由 完成的set +H)。

另一种选择:反斜杠转义应该有效。尝试

sed_code=":again;\$\!N;\$\!b again; s/{[^}]*}//g"
sed "$sed_code" file

相关内容