É mais fácil usar grep
:
grep -Po 'data-addon="\K[^"]*' file
ou para armazenar a saída na variável:
var=$(grep -Po 'data-addon="\K[^"]*' file)
arquivo.txt:
hello:"hello"; my love; my world:"my is world"
Questions<<my:"475832">> data-addon="652256"---my lover :"987654321";;;Questions
heart!Questions
mas eu quero pegar o número depois de uma string "data-addon="
exemplo:
652256
É possível com o comando awk
?
Salve seus dados de amostra como manuel.txt
e execute:
awk '/data-addon/ {gsub(/^.*data-addon="/,"");gsub(/".*/,"");print}' manuel.txt
para armazenar o resultado em uma variável:
myvar=$(awk '/data-addon/ {gsub(/^.*data-addon="/,"") ; gsub(/".*/,"") ; print}' manuel.txt)
Isso seria mais fácil no sed:
sed -n '/data-addon/ { s/^.*data-addon="// ; s/".*// p}' manuel.txt
myvar=$(sed -n '/data-addon/ { s/^.*data-addon="// ; s/".*// p}' manuel.txt)
Nesse tipo de cenário, eu uso awk
, dividindo palavras entre aspas e espaços & passar pelos campos:
awk -F'[ "]*' \
'
{
for (i=1;i<=NF;i++)
{
if ($i == "data-addon=")
{
print $(i+1)
exit
}
}
}
' file.txt
HTH
O seguinte deve fazer o que quiser:
cat file.txt | awk -F"data-addon=" '{print $2}' | awk -F\" '{print $2}' | awk NF