Como faço para executar uma correspondência de regex em um arquivo e gerar o resultado.
Por exemplo, encontre version="X.Y.Z"
e armazene em uma variável o resultado correspondente de XYZ para poder ecoar a correspondência posteriormente.
O é tanto quanto eu consegui sozinho: sed -n -e / versão \ = \ ". * \" '$ PATH "version.js"
O conteúdo do meu arquivo é:
var config;
function check() {
if (window.environment && window.revision) {
config.version = "0.0.1";
config.isApp = true;
}
else {
setTimeout(check);
}
}
check();
e desejo armazenar 0.0.1
em uma variável como desejo inserir esse valor em outro arquivo.
cat version.js | grep ...
não faria o truque neste caso?Respostas:
Isso deve estar funcionando no seu caso:
cat /path/to/version.js | grep config.version | grep -P -o '\d\.\d\.\d'
Se seu número for de dois dígitos (ou mais), você precisará adicionar um + ao \ d correspondente ao número.
Como
'\d\.\d\.\d'
correspondências,1.1.1, 1.1.2, 2.2.9
etc., não corresponderia1.10.2
, o regex precisaria ser modificado para'\d\.\d+\.\d'
.Você pode seguir o caminho "fácil / seguro" e apenas colocar
'\d+\.\d+\.\d+'
.A saída do primeiro seria apenas o número da sua versão, que poderia ser definida como uma variável depois.
Como uma edição do seu comentário: Isso funciona corretamente para mim. Eu criei um arquivo com suas entradas, grepping isto com meu comando produz isto:
Usando isso para definir uma variável como tal, o eco também funciona:
fonte
-P
? Isso não deveria estar acontecendo, como grep padrão não pode interpretar o \ d regex e precisaria de [[: digit:]]