Como grep uma palavra após / summary / em uma variável e armazenar a palavra em uma nova variável no script bash

0

Eu sou muito novo no script bash e também no comando grep. Eu solicito que o usuário insira um caminho e armazene em uma variável chamada caminho.

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

A estrutura do caminho sempre será a mesma, é apenas que o sistema, o modo, os nomes das saídas não são corrigidos. Portanto, estou planejando usar o nome do sistema localizado após / summary /.

Como posso eu grep o nome do sistema e, em seguida, armazenado em uma variável para que eu possa usar a variável usando o script bash? Espero que o nome do sistema esteja em uma nova variável. (por exemplo, $ systemname)

    
por mmaz 13.07.2017 / 03:44

4 respostas

1

Se a estrutura do caminho "system" for a mesma, você poderá usar cut para essa tarefa.
-d significa delimitador, no seu caso é '/'. Enquanto -f é necessário para escolher a peça cortada.

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@:~/$
    
por 13.07.2017 / 03:51
1
por 13.07.2017 / 10:56
0

Usando o suporte ao 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

Dado que o OP mudou os requisitos para: systen name pode estar em qualquer lugar, mas sempre após 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
    
por 13.07.2017 / 04:57
0

AWK:

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