ユーザーにパスを求めるメッセージを表示し、それを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