2008-08-26 13 views
4

bashの現在の行でregexp-string replaceを実行する方法はありますか?Bash reg-exp代入

長いコマンドラインを入力して、どこかで単語を変更したいと思うような状況にいることがよくあります。

私の現在のアプローチはCtrlキーを押して、行を終了することです + 、Enterキーを押します(行をコメントアウトする)#を挿入し、(行の先頭に取得する)、その後^oldword^newwordを使用構文(^oldword^newwordはoldwordをnewwordに置き換えて前のコマンドを実行します)。

これを達成するには、より良い(より速い)方法が必要です。 (私はsshセッションのほとんどの時間にいるので、マウスは使用できません)。

おそらく、わたしには分かりませんが、これにはいくつかのemacsのようなキーコマンドがあります。

編集:viモードを使用しようとしました。奇妙なことが起こった。私は愛情のあるvim-userですが、私は愛するbashを使って深刻な問題を抱えていました。私の潜在意識の中に燃やされたそれらの指の動きは突然すべて機能しなくなりました。私はすぐにemacs-modeに戻って、emacsを私の好きなエディタとして試してみました(同じことが起こるかもしれませんが)。

答えて

1

残念ながら、いいえ、本当に良い方法はありません。キーストロークの作成に飽きた場合は、マクロを使用してそれらをトリミングすることができます。新しいbashのインスタンス内(またはC-x C-rを押すことにより、現在のシェルで.inputrcをリロードした後)、

"\C-x6": "\C-a#\C-m^" 
"\C-x7": "\C-m\C-P\C-a\C-d\C-m" 

、次の操作を行うことができます:あなたの~/.inputrcに以下を追加します

  1. タイプ偽コマンド(例:ls abcxyz)。
  2. Ctrl-xを押し、次に6を押します。マクロは行の先頭に#を挿入し、コメント行を実行し、最初に^と入力します。
  3. 修正内容を入力してください(例:xyz^def)。
  4. Ctrl-xを押し、次に7を押します。マクロは置換を完了し、前の(コメント付きの)行に移動し、コメント文字を削除してもう一度実行します。

これはまったくエレガントではありませんが、私はあなたがreadlineで手に入る最高のものだと思います。

3

やあ、

何代わりにviのモードを使用してはどうですか?単にset -o viと入力してください

次に、変更したい単語に移動して、単語の内容に応じてcwまたはcWを実行します。

おっと、あなたを追加するのを忘れました。コマンド履歴の前の行にESC kを入力してください。

通常、エディターには何を使用しますか?

歓声、 ロブ

編集:私は私の元の応答であなたは「EX」モードではしているときに入力したコマンドを使用してbashでviコマンドラインを考える必要があるということだったと言うのを忘れて何vi、つまりコロンに入った後。

h(左)とl(右)の古いviコマンドを使用してコマンド履歴を移動するのが最悪なことです。 W(またはW)を使って単語間でバウンスすることもできます。

これに慣れると、あらゆる種類のコマンドが利用できます。 ESC/my_commandを入力すると、テキストmy_commandを含むコマンドラインの最初の出現を見つけるために、最近の最初のr履歴が検索されます。それが見つかったら、nを使って次の出現箇所などを見つけて、Nを使って検索の方向を逆にすることができます。

viモードで利用できるものを表示するには、bashのマニュアルページをお読みください。上向き矢印と下向き矢印がESC kとjに置き換えられたという事実を乗り越えれば、viモードではbashでコマンドライン編集のためのemacsモード以上のものが提供されます。

IMHO natchurly! ( - :

Emacs?80メグと常に交換!kshの中

歓声、 ロブ

3

は、viのモードでは、あなたが「V」をヒットした場合、コマンドモードでは、あなたの現在のコマンドラインの内容に関する完全なviのセッションを起動する一方。次に、viコマンドの全範囲を使用して編集することができます(あなたの場合はグローバル検索と置き換え)。 when:viからのwq、編集されたコマンドが実行されます。私はbashに似たようなものがあると確信しています。 bashは前任者を拡張する傾向があるため、おそらく類似したものがあります。

+0

これはBashでも実際に動作しますが、現在のコマンドラインで本格的な "編集者用の作業"をしたいときにはこれが最善の答えだと思います。 – jwd