行全体ではなく、特定の文字やパターンから別の特定の文字やパターンに文字列を把握したいと思います。
たとえば、
$ > 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
(初心者にやさしい方法で仕上げのカスタマイズを参照)