변수에서 /summary/ 뒤에 단어를 grep하고 해당 단어를 bash 스크립트의 새 변수에 저장하는 방법

변수에서 /summary/ 뒤에 단어를 grep하고 해당 단어를 bash 스크립트의 새 변수에 저장하는 방법

사용자에게 경로를 묻는 메시지를 표시하고 이를 path라는 변수에 저장합니다.

$path: /a/b/c_12/d/e/summary/system/mode/output/file.txt

경로의 구조는 항상 동일하지만 시스템, 모드, 출력 이름은 고정되어 있지 않습니다. 따라서 /summary/ 뒤에 있는 시스템 이름을 grep할 계획입니다.

bash 스크립트에서 해당 변수를 사용할 수 있도록 시스템 이름을 grep한 다음 변수에 저장하려면 어떻게 해야 합니까? 나는 시스템 이름이 새 변수에 있어야 한다고 예상했습니다. (예: $systemname)

답변1

"시스템" 경로 구조가 동일한 경우 cut이 작업에 사용할 수 있습니다.
-d는 구분 기호를 나타내며, 귀하의 경우에는 "/"입니다. 그리고 -f는 잘라낼 부분을 선택해야 합니다.

cs-server@:~/$ systemname=$(echo "/a/b/c_12/d/e/summary/system/mode/output/file.txt" | cut -d'/' -f8)
cs-server@:~/$ echo $systemname
system
cs-server@:~/$

답변2

답변3

Bash ERE 지원 사용:

$ echo $FILE
/a/b/c_12/d/e/summary/system/mode/output/file.txt
$ [[ $FILE =~ (\/[a-zA-Z_0-9]*){7} ]]
$ echo ${BASH_REMATCH[1]:1}
system

OP가 요구 사항을 다음과 같이 변경한 경우 시스템 이름은 어디에나 있을 수 있지만 항상 뒤에 올 수 있습니다.summary

$ echo $FILE
/a/b/c_12/d/e/f/g/summary/system/mode/output/file.txt
$ [[ $FILE =~ (*\/summary\/[a-zA-Z_0-9]*){1} ]]
$ echo ${BASH_REMATCH[2]:9}
system

답변4

AWK:

var1=$(echo '/a/b/c_12/d/e/summary/system/mode/output/file.txt' | awk 'BEGIN{FS="/";}{print $8}');echo $var1

관련 정보