問題を解決する努力中コードゴルフホームページ、簡単なテキストを交換してみてください。
- 与えられたファイル
coin.txt
1つの単語をheads
含むtails
ed
スクリプトがありますflip.ed
次のように:
s/heads/1/n\
s/tails/-1/n\
wq
.
- 次に、端末(macos、zsh)で次のように実行します。 (各」エドマスタリー「第111章)
[~/ゴルフ/エド]λエドコイン.txt <フリップキャットコイン.txt; 6 ? 尾
スクリプトtails
が-1
./bin/ed
どちら/usr/local/bin/ged
も複数の置換を実行できないようです。
これはTIO.runの例、私の考えにはGNUバージョンを実行しているようです。
ed
私のスクリプトに問題がありますか?それでもパワーバグed
??
修正する
解決策、礼儀@ed1confTwitterで。接頭辞を使用すると、一致する行のみが置き換えられるg
ため、元のスクリプトを破損するエラーを回避できます。 オンラインでお試しください!
g/heads/s//1/
g/tails/s//-1/
wq
.
ベストアンサー1
これは可能ですが、リダイレクトや通常のファイルを介してコマンドを送信することはできません。
~からGNU編集オンラインマニュアル:
エラーが発生した場合は、edへの入力が通常のファイルまたはhere文書から出た場合は終了し、そうでない場合は「?」を印刷してコマンドモードに戻ります。
ファイル内の単語が両方のパターンと一致しないため、両方のコマンドのいずれかが失敗するため、行1ed
で一致しないか、行2で一致しないため終了します。それ一致しません(したがって、変更されたファイルを保存する前に終了します)。
これらのコマンドは標準入力(バックスラッシュとサフィックスを除く)を介して機能します。
printf '%s\n' 's/heads/1/' 's/tails/-1/' 'wq' | ed -s coin.txt
?
失敗(リダイレクト可能)の結果としてs/heads/1/
stderrを受け取りますが、交換はすべて期待どおりに発生します。
終了するのに十分な.
ので、末尾のコマンドを削除しました。q
ed
回避策、出版社:ed(1) Twitter カンファレンス、例:
g/heads/s//1/
g/tails/s//-1/
wq
または、次のセクションに省略形がありませんs///
。
g/heads/s/heads/1/
g/tails/s/tails/-1/
wq
これらのバリエーションは、g
置換が行われなくてもコマンドが失敗しないために機能します。