変数で/ 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

関連情報