상위 폴더 이름에 대한 정규식

상위 폴더 이름에 대한 정규식

나는 이와 같은 경로를 가지고 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 스타일 경로의 마지막에서 두 번째 부분을 출력하고 싶다고 가정하면 다음과 같이 할 수 있습니다.

msdos_path='C:\Users\Administrator\Desktop\Photos-or\3-PRO\3-1-CR\CR-RESTS\LES-COQS\1920x500'
expr "\\$msdos_path" : '.*\\\(.*\)\\.*'

여기에 출력됩니다 LES-COQS.

답변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

테스트 대상:https://rextester.com/l/bash_online_compiler

답변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

관련 정보