シェルパラメータ拡張時にパターンマッチを維持する

シェルパラメータ拡張時にパターンマッチを維持する

${variable##pattern}(leading)または(trailing)を使用してbash変数のパターンを削除できます${variable%%pattern}

しかし、パターンを維持して残りを投げる唯一の方法はbashを見つけることができません。

sed、、、またはを使用するawkソリューションがあることを知っていますがgrep、私が見落としている合理的に効率的なbash専用のソリューションがあるかどうか疑問に思います。

PS:これは単なる退屈な質問ではありません。元の問題は、名前にパターン(技術的には'[A-Z]+([A-Z])-[0-9][0-9]+([0-9])'ダッシュと数字が続く大文字)を含むファイルを処理し、同じパターンを使用してファイルを一覧表示し、さらに処理するために一致する文字列を抽出したいということです。 。

ベストアンサー1

${var%"${var##pattern}"}
${var#"${var%%pattern}"}

例:

$ k='ab*10cd20ef*'
$ echo "${k%"${k##*[0-9]}"}"
ab*10cd20
$ echo "${k#"${k%%[0-9]*}"}"
10cd20ef*

シェルが拡張をパターンとして解釈するのを防ぐには、引用符が重要です。echo "${k#${k%%[0-9]*}}"出力される結果が正しいことを確認してください。

おすすめ記事