Usando sed
Por conveniência, vamos colocar nossa saída find na variável s :
$ s='/var/data/run/stores/user.rstd/info.settings:4: Password = "xxxxxxx";'
Agora, vamos extrair as partes que você deseja:
$ echo "$s" | sed -E 's|/([^/]*/){4}([^/.]*)[.][^"]*(.*)| |'
user "xxxxxxx";
Como funciona
O script sed consiste em um único comando substituto. O -E flag é usado para ativar expressões regulares estendidas.
-
A linha é comparada com:
/([^/]*/){4}([^/.]*)[.][^"]*(.*)/([^/]*/){4}corresponde aos primeiros quatro diretórios. Por causa dos parentes, o último desses diretórios é salvo como grupo 1, mas não teremos uso para isso.([^/.]*)corresponde ao nome de usuário sem a extensão. Por causa dos parênteses, esse agrupamento é salvo como grupo 2.[.][^"]*corresponde à extensão e tudo até a primeira aspa dupla.(.*)corresponde a tudo, começando com a primeira aspa dupla até o final da linha. Novamente, por causa dos parênteses, isso é salvo como grupo 3. -
O texto de substituição é
, o que significa que o grupo 2 é seguido por um espaço seguido pelo grupo 3.
Usando o awk
$ echo "$s" | awk -v FS="/" '{ name=$6; sub(/[.].*/,"", name); sub(/[^"]*/, ""); print name, $0;}'
user "xxxxxxx";
Como funciona
-
-v FS="/"Isso define o separador de campo como
/. -
name=$6; sub(/[.].*/,"", name)Como o awk conta campos, o nome está no sexto campo. Salvamos o sexto campo na variável
namee, em seguida, removemos tudo emnameapós o primeiro período. -
sub(/[^"]*/, "")Isso remove tudo, desde a linha até, mas não inclui, o primeiro
". -
print name, $0Isso imprime o nome, um separador de campo (o padrão é um espaço) e o que resta da linha após a substituição (a senha).