사용자에게 경로를 묻는 메시지를 표시하고 이를 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
배쉬를 사용하여쉘 매개변수 확장
$ path='/a/b/c_12/d/e/summary/system/mode/output/file.txt'
$ b=${path##/a/b/c_12/d/e/summary/}
$ echo $b
system/mode/output/file.txt
$ echo ${b%%/*}
system
$
또한보십시오:
답변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