すべての一致を置き換える bash レコード拡張の繰り返し

すべての一致を置き換える bash レコード拡張の繰り返し

:&bash 履歴拡張の置換を繰り返します。たとえば、

$ echo 1 1 1 1 1
1 1 1 1 1
$ ^1^9
echo 9 1 1 1 1
9 1 1 1 1
$ echo 1 1 1 1 1
1 1 1 1 1
$ ^1^9^:&
echo 9 9 1 1 1
9 9 1 1 1
$ echo 1 1 1 1 1
1 1 1 1 1
$ ^1^9^:&:&:&:&
echo 9 9 9 9 9
9 9 9 9 9
$ 

:&上記のように、各反復には入力が必要です。すべての一致を自動的に繰り返し変更する方法はありますか?私の言葉は:

$ echo 1 1 1 1 1
1 1 1 1 1
$ ^1^9^:*
echo 9 9 9 9 9
9 9 9 9 9
$ 

答え1

あなたはそれを使用することができますイベントインジケータ代わりに:

$ echo 1 1 1 1 1
1 1 1 1 1
$ !!:gs/1/9/
echo 9 9 9 9 9
9 9 9 9 9

!!単語インジケーター前のコマンドの実行に展開されます。sそしてg修飾子:

オプションの単語マーカーの後に、それぞれ「:」が続く次の修飾子の1つ以上を追加できます。

古い/新しい/

イベントラインで最初に表示される古い項目を新しい項目に置き換えます。 [...]

g/年

イベント行全体に変更が適用されます。のように 's' と一緒に使用するか、gs/old/new/'&' と一緒に使用します。

つまり、!!:gs/1/9/「前のコマンドを実行し、1をすべて9に置き換えます」を意味します。

関連情報