前回のコマンドの一部を書き換えて実行

引数が似たようなコマンドを複数実行したい場合とかあると思います。そういう時は以下のように実行すると書き換えたコマンドを実行できます。

echo nju_nju
# nju3_nju3
history | sed -n 1p | string replace -a nju 純
# echo 純_純

これはecho nju_njuを最初実行した後、これをecho 純_純と変換して表示するコマンドです。
string replaceは文字を置き換えるためのfishコマンドで、最初の文字列を後の文字列に変換できます。また、-a--allオプションを使うことですべてのマッチする文字列を後に指定した文字列に変換できます。

ただしこれはまだ変換したコマンドを表示しているだけなので、それを実行する為にevalを使います。

echo nju_nju
# nju3_nju3
eval (history | sed -n 1p | string replace -a nju 純)
# 純_純

純_純と得れました。

ちなみにsed -n 1pの部分を2p3pと変更すると、2つ前や3つ前のコマンドを置換したものを実行できたりもします。