私はこのようなパスを持っておりC:\Users\Administrator\Desktop\Photos-or\3-PRO\3-1-CR\CR-RESTS\LES-COQS\1920x500
、この場合は親フォルダと一致する正規表現が必要ですLES-COQS
。
私は試した:
echo "C:\Users\Administrator\Desktop\Photos-or\3-PRO\3-1-CR\CR-RESTS\LES-COQS\1920x500" | grep -i "[a-zA-Z0-9-]*\\\[0-9a-z]*$"
プレビュー/振り返りを使用する必要がありますか?それとももっと簡単な方法がありますか?
ありがとう
答え1
MS-DOSスタイルパスの最後から2番目の部分を出力したいと仮定すると、次のようにできます。
msdos_path='C:\Users\Administrator\Desktop\Photos-or\3-PRO\3-1-CR\CR-RESTS\LES-COQS\1920x500'
expr "\\$msdos_path" : '.*\\\(.*\)\\.*'
ここに出力されますLES-COQS
。
答え2
パスから2番目の項目を抽出する方法はいくつかあります。ソリューションを混合するいくつかの方法は次のとおりです。
p='C:\Users\Administrator\Desktop\Photos-or\3-PRO\3-1-CR\CR-RESTS\LES-COQS\1920x500'
echo "$p" | grep -oP '.*\\\K[^\\]*(?=\\[^\\]+)' # PCRE
echo "$p" | sed 's!^.*\\\([^\\]*\)\\[^\\]*$!\1!' # RE
echo "$p" | awk -F'\\' '{print $(NF-1)}' # Awk
IFS='\\' ps=($p); echo "${ps[-2]}" # Shell (bash)
px="${p%\\*}"; echo "${px##*\\}" # Shell
Windowsフォルダパスの各バックスラッシュは、各REパターンのデュアルバックスラッシュと一致する必要があるため、式を読み取るのはより困難です。 (実際、私は交換して\
これらのいくつかを行いました/
。)
答え3
おそらくこれはあなたが望む結果を得るのに役立ちます。
#!/bin/bash
# GNU bash, version 4.4.20
echo "C:\Users\Administrator\Desktop\Photos-or\3-PRO\3-1-CR\CR-RESTS\LES-COQS\1920x500" | rev | awk -F'\' '{ print $2 }' | rev
出力:
LES-COQS
答え4
拡張正規表現および代替コマンドで sed を使用できます。
$ echo "C:\Users\Administrator\Desktop\Photos-or\3-PRO\3-1-CR\CR-RESTS\LES-COQS\1920x500" | sed -E 's/(.*\\)([^\\]+)(\\[^\\]+)/\2/'
LES-COQS