você pode usar o comando cut para essa finalidade.
grep Path filename |cut -c6-
Aqui, a opção -c6- significa imprimir do 6º ao último caractere.
Eu quero imprimir uma parte de uma linha em um arquivo. A linha inteira parece assim.
Path=fy2tbaj8.default-1404984419419
Eu quero imprimir apenas os caracteres após Path= . Eu tentei grep Path filename | head -5 . Mas não está funcionando. Ele ainda mostra toda a linha. Como posso fazer isso?
você pode usar o comando cut para essa finalidade.
grep Path filename |cut -c6-
Aqui, a opção -c6- significa imprimir do 6º ao último caractere.
Você pode usar grep e apenas grep :
grep -oP "(?<=Path=).*" file
Explicação :
De man grep :
-o, --only-matching
Print only the matched (non-empty) parts of a matching line,
with each such part on a separate output line.
-P, --perl-regexp
Interpret PATTERN as a Perl compatible regular expression (PCRE)
O lookbehind (?<=Path=) afirma que na posição atual na string, o que precede são os caracteres% código%. Se a afirmação for bem-sucedida, o mecanismo corresponderá ao padrão de resolução.
Para a sintaxe de expressões regulares do Perl 5, leia a página de manual de expressões regulares do Perl .
A solução awk é o que eu usaria, mas um processo um pouco menor é sed e pode produzir os mesmos resultados, mas substituindo a parte PATH da linha por "" , ou seja
sed -n 's/^Path=//p' file
O comportamento padrão -n substitui sed s de "imprimir todas as linhas" (por isso, -n = sem impressão),
e para imprimir uma linha, adicionamos o caractere p após a subestação. Apenas linhas onde a substituição acontece serão impressas.
Isso lhe dá o comportamento que você pediu, de grep ing para uma string, mas removendo a parte Path= da linha.
Se, por comentários de David Foerster, você tiver um arquivo grande e desejar parar o processamento assim que tiver correspondido e imprimido a primeira correspondência com 'Path =', poderá dizer ao sed para sair, com o comando q . Observe que você precisa torná-lo um grupo de comando cercando ambos em { ..} e separando cada comando com ; . Então o comando aprimorado é
sed -n 's/^Path=//{p;q;}' file
IHTH
grep greps uma linha de texto e a exibe. head exibe as primeiras linhas de texto n , não caracteres.
Você está procurando sed ou awk :
awk '{print }' FS='='
Isso define = como um separador de campo e imprime o segundo campo.
Com o GNU grep:
$ echo Path=fy2tbaj8.default-1404984419419 | grep -oP '(Path=)\K.*'
fy2tbaj8.default-1404984419419
\K mantém as coisas restantes de \ K, não inclua em $& .
Claro que a solução é usar grep -Po .
Vamos adicionar outras soluções para completar:
com cut , definindo o delimitador como = :
cut -d'=' -f2 file
Pode ser um pouco arriscado, mas você também pode originar o arquivo, para que $Path contenha o código valor.
source file
echo "$Path"
$ cat a
this=aaabbccc
that=dddeee
$ source a
$ echo "$this"
aaabbccc
$ echo "$that"
dddeee
Conforme comentários, veja como source apenas parte do arquivo:
$ cat a
Path=22
Path=33
$ source a
$ echo $Path
33
$ source <(head -1 a)
$ echo $Path
22
Tags command-line scripts grep