2017-08-21 10 views
0

を失敗し、このSED {コマンドは、Windows用のMKS SEDで

TYPE Q:\temp\curtainssetspread.M3U | SED -E "/z/{s_a_b_}" 

sed: garbage after command 

なぜで失敗しますか?

ドキュメントで正しくこの使用アコード:

a,b{ groups all commands until the next matching }, so that sed executes the entire group only if the { command is selected by its address(es). 
+1

MKS sedの特殊性についてはわかりませんが、 's_a_b'は単なるコマンドであり、POSIX sedは'/z/s_a_b_'を中括弧なしで受け入れます。閉じブレースの前に ';'を挿入して、BSD sedのいくつかの問題を修正してください。 –

+0

また、スラッシュの代わりにアンダースコアを使用する理由は何ですか? –

+0

@Benjaminエスケープを減らす。アンダースコアはスラッシュより区切られた文字列の中に少なく表示されます。そして私はアンダースコアが区切りをより目立たせることを見出します。 – ChrisJJ

答えて

1

POSIXによると、}は改行が先行しなければなりません。場合

sed -e "/z/{s_a_b_" -e "}" 

:すべてシステム(複数-e Sを使用すると、一緒に、間に改行して各文字列を結合)私はMKSが何をするかわからないんだけど、標準を持っていることの美しさは、次のに取り組むべきであるということですそれは動作しません.MKSのバグであり、彼らのsedがPOSIXに準拠していると言われるので、報告されるべきです。

でも、私はベンジャミンのアドバイスに従い、可能な場合にだけ

sed -e '/z/s_a_b_' 

をやってお勧めします。

+0

誰も> _ < – HTNW

+0

誰も見たことがありません。 '(複数の-esを使用すると、各文字列を改行で結合します)は、文書化されていない動作です(https://www.mkssoftware.com/docs/man1)。 /sed.1.asp。ありがとう。 – ChrisJJ

+0

"彼らはsedがPOSIXに準拠していると言います。彼らはそれを暗示していますが、実際にどこに言及しているのかを見たいと思います。 – ChrisJJ