특정 문자 뒤의 문자를 얻는 방법

특정 문자 뒤의 문자를 얻는 방법

변수 WORKSPACE가 있습니다./Users/shinichiokada/Bash_Projects/markdown-docs-as-pdf/.vivliostyle/tauri/en

각 행에서 이를 제거하고 두 개의 변수를 만들고 싶습니다.

예를 들어 온라인에서 검색해 보면

"/Users/shinichiokada/Bash_Projects/markdown-docs-as-pdf/.vivliostyle/tauri/en/references/architecture/recipes/hermit.md",

얻기 위해

category=references/architecture/recipes
title=hermit.md

선의 깊이가 다릅니다.

"/Users/shinichiokada/Bash_Projects/markdown-docs-as-pdf/.vivliostyle/tauri/en/guides/faq.md",

얻기 위해

category=guides
title=faq.md

등.

다음을 시도했지만 마지막 두 항목만 가져옵니다.

title=$(basename "$line")
filedirname=$(dirname "$line")
category=$(basename $filedirname)

Bash로 이 작업을 어떻게 수행할 수 있나요?

답변1

카테고리와 제목은 /.vivliostyle/tauri/en경로 이름 뒤에 오는 내용에 따라 결정된다고 가정합니다.

다음 조건으로

WORKSPACE="/Users/shinichiokada/Bash_Projects/markdown-docs-as-pdf/.vivliostyle/tauri/en"

다음 방법을 사용하여 bash원하는 결과를 얻을 수 있습니다.

pathname="${line#$WORKSPACE/}"
#or 
pathname="${line/$WORKSPACE\/}" #replaces $WORKSPACE/ with nothing

#Getting category:
category="${pathname%/*}"
echo "Category: $category"

#Getting title:
title="${pathname##*/}"
echo "Title: $title"

따라서 다음과 같은 경로가 있습니다.

line="/Users/shinichiokada/Bash_Projects/markdown-docs-as-pdf/.vivliostyle/tauri/en/references/architecture/recipes/hermit.md"

위의 코드를 사용하면 다음을 얻을 수 있습니다.

Category: references/architecture/recipes
Title: hermit.md

다음 경로가 있습니다.

line="/Users/shinichiokada/Bash_Projects/markdown-docs-as-pdf/.vivliostyle/tauri/en/guides/faq.md"

당신은 다음을 얻습니다:

Category: guides
Title: faq.md

설명하다

pathname="${line#$WORKSPACE/}"

위의 줄로삭제 중$WORKSPACE/변수에 포함된 내용 $line.
따라서 문자열이 /Users/shinichiokada/Bash_Projects/markdown-docs-as-pdf/.vivliostyle/tauri/en/제거됩니다 /Users/shinichiokada/Bash_Projects/markdown-docs-as-pdf/.vivliostyle/tauri/en/references/architecture/recipes/hermit.md".
내가 입력한 문자열은 $pathname다음과 같습니다.

references/architecture/recipes/hermit.md

category="${pathname%/*}"

위 줄은 /경로에서 마지막으로 발견된 모든 항목을 삭제합니다. references/architecture/recipes/hermit.md따라서 여기에서 삭제되는 내용은 다음 /hermit.md$category같습니다.

references/architecture/recipes

title="${pathname##*/}"

위 줄은 /마지막 경로 이전의 경로에 있는 모든 항목을 삭제합니다. references/architecture/recipes/hermit.md따라서 여기서 삭제되는 항목은 다음과 같습니다 references/architecture/recipes/. 그러면 유언장에는 다음이 $title포함됩니다.

hermit.md

관련 정보