나는 이와 같은 경로를 가지고 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
답변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