ある文字やパターンから別の文字やパターンに移動するには?

ある文字やパターンから別の文字やパターンに移動するには?

行全体ではなく、特定の文字やパターンから別の特定の文字やパターンに文字列を把握したいと思います。

たとえば、

$ > echo "The brown fox jumps over the lazy dog" | grep -option "b" "s"
brown fox jumps

$ > echo "The brown fox jumps over the lazy dog" | grep -option "the l" "g"
the lazy dog

実際に必要なのは、dirs -v次のことができるようにパスを移動するときです。

$ > ls -AF
file.txt   github/    .vim/

$ > dirs -v
0    ~
1    ~/.vim/pack/themes
2    ~/.vim/colors
3    ~/github/dirname
4    ~/github/repo/

$ > mv -v file.txt $(dirs -v | grep 2 | grep -option "~" "colors")
renamed 'file.txt' -> '~/.vim/colors/file.txt'

~含まれている行のみを一致させるためにgrepを2回使用しました2。私の.zshrcでシェル関数/エイリアスでこれを行う方法はありますか?


mv file.txt ~2回答:私は以下の答えの1つを使用しました。私がこのようなことができるとは思わなかったんです、ハハ。

また、以下の答えの1行を.zshrcに入れました。

function grepo () { grep -Po "${1}.*?${2}" }
alias -g GO='| grepo'

これにより、次のように使用できます。

$ > echo "the brown fox jumps over the lazy dog" GO b s
brown fox jumps

$ > echo "the brown fox jumps over the lazy dog" GO "the l" g
the lazy dog

$ > echo "the brown fox jumps over the lazy dog" GO fox over
fox jumps over

私の問題では動作しませんが、何らかの理由で考えることはできません。

$ > ls -AF
file.txt   github/    .vim/

$ > dirs -v
0    ~
1    ~/.vim/pack/themes
2    ~/.vim/colors
3    ~/github/dirname
4    ~/github/repo/

$ > mv file.txt $(dirs -v GO "~/.v" "themes")
mv: cannot move 'file.txt' to '~/.vim/pack/themes': No such file or directory

ベストアンサー1

では、zsh次のことができます。

$ str='The brown fox jumps over the lazy dog'
$ print -r -- ${(SM)str#b*s}
brown fox jumps

ksh${str#pattern}演算子の削除最短pattern文字列の先頭から一致する文字列です。 (Sのためサブストリング)パラメータ拡張フラグパターンが一致に限定されないように拡張最初に、しかし最初からできるだけ近くに。フラグM(龍マッチ)は、これらの拡散演算子が一致する部分を削除するのではなく、一致するコンテンツに拡張することを可能にします。

あなたを許可する##代わりに使用してください#最長変える最短および%/%%文字列の最後にパターンを探します。

*?PCREマッチングを実行し、貪欲ではない演算子を使用することもできます。

$ zmodload zsh/pcre
$ [[ $str -pcre-match 'b.*?s' ]] && print -r -- $MATCH
brown fox jumps

または:

$ set -o rematchpcre
$ [[ $str =~ 'b.*?s' ]] && print -r -- $MATCH
brown fox jumps

ただし、特定のユースケースでは次のようにします。

mv file.txt ~2

ファイルをディレクトリスタックの2番目のディレクトリに移動します。

設定が正しい場合は、[次へ]をクリックすると、完了時に次の~<number>内容に対応する内容が表示されます。Tab~+

$ MVファイル〜+Tab
完全なディレクトリスタック
1 - ~/install/cvs/zsh/Config
2 - 〜
3 - / usr
4 - 〜空
5 - 〜
6 - /

~/.zshrcこの出力を生成する最小値は次のとおりです。

set -o autopushd
autoload -Uz compinit
compinit
zstyle ':completion:*' menu select=0
zstyle ':completion:*' verbose true
zstyle ':completion:*' format 'Completing %d'

compinstall(初心者にやさしい方法で仕上げのカスタマイズを参照)

おすすめ記事