我尝试了上面给出的代码删除大括号之间的文本
但是我在 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