A string que você está procurando sempre tem MOM:
antes, mas você não disse se sempre tem "
depois dela. Para o propósito desta resposta, assumirei que você está procurando por cadeias que podem conter caracteres alfabéticos, numerais ou sublinhados em letras maiúsculas ou minúsculas. Estes são conhecidos como caracteres da palavra na terminologia de expressões regulares . Combinar essas "palavras" de texto é útil o suficiente para que a maioria dos dialetos de expressões regulares tenha recursos para ajudar a fazer isso. Se não é isso que você quer, você pode modificar essa solução de acordo ou usar as técnicas nas outras respostas.
Eu echo David Foerster's , Zanna's , e JJoao avisos sábios sobre a análise de HTML com regex e sobre isso não ser robusto. Por favor, tenha cuidado, e considere se o que você pediu é realmente exatamente o que você quer fazer. Em seu código de exemplo, você atribuiu o caminho para o arquivo de entrada à variável $file
, portanto, assumirei que isso foi feito. Você atribuiu a saída do seu comando para $y
, então eu farei o mesmo.
com grep
Isto é similar ao método de JJoao , e você pode usar esse método com a substituição de comandos, bem como se a expressão regular fosse é mais adequado às suas necessidades.
y="$(grep -oPm1 'MOM:\K\w+' "$file")"
-oPm1
é apenas uma maneira mais compacta de escrever -o -P -m 1
.
-
-o
imprime apenas as correspondências, não a linha inteira.
-
-P
usa PCRE , que suporta \K
para descartar o texto correspondido até o momento, para que não seja incluído no texto correspondente retornado.
-
-m 1
pára depois de corresponder ao padrão uma vez. Desta forma, você atribui apenas a primeira correspondência à variável, em vez de várias correspondências separadas por novas linhas .
Note que você também pode adicionar -m1
ao comando em resposta de JJoao para que ele use apenas as correspondências do primeiro linha que tem algum.
Se a primeira linha com uma correspondência contiver várias correspondências , esse método grep
fornecerá todas elas . Por exemplo, se essa linha for MOM:MANIKA MOM:JANE"></td><br>
, então $y
manterá o valor:
MANIKA
JANE
com sed
Isso se assemelha ao método de Zanna .
y="$(sed -rn '0,/.*MOM:(\w+).*/ s///p' "$file")"
Além de ser incluída como uma substituição de comando, as diferenças são que eu:
- pare após a primeira linha que contém uma correspondência
- corresponde a um ou mais caracteres de palavra (
\w+
) em vez de caracteres até "
( [^"]+
)
- consuma zero ou mais caracteres arbitrários (
.*
) primeiro, para que MOM:
não precise aparecer no início da linha
- use uma sintaxe mais compacta que evite escrever o padrão duas vezes.
A técnica que usei para isso requer
GNU sed
, mas esse é o
sed
implementação fornecida no Ubuntu.
Se a primeira linha com uma correspondência contiver várias correspondências , esse método sed
fornecerá apenas a última . De MOM:MANIKA MOM:JANE"></td><br>
você recebe:
JANE