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 FAQ)。

答え2

よくわかりませんが、tcsh歴史拡張の質問のように聞こえます。bash一重引用符で履歴の拡張を防ぐことができます。そうでないかもしれませんtcsh

履歴拡張を無効にすることができます(しかし、どうすればいいのかわかりません。bashで行いますset +H)。

別のオプション:バックスラッシュエスケープが機能するはずです。努力する

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

関連情報