Lê de um certo ponto para um certo caractere

3

Digamos que eu tenha um arquivo como este:

foo bar foo bar foo bar foo bar something useful"foo bar foo bar"

Basicamente, quero saber como posso obter a string something useful por si mesma, seja salva em seu próprio arquivo ou exibida apenas como saída.

Sempre haverá o mesmo número de caracteres (33) antes de something useful e sempre haverá " depois disso.

    
por MD XF 01.08.2017 / 19:45

5 respostas

11

Tente isto:

cut -c 34- | cut -d '"' -f1

Primeiro cut remove os primeiros 33 caracteres; segundo cut mantém apenas a parte antes do primeiro " .

    
por 01.08.2017 / 19:53
5

Aqui está o GNU grep version usando a sintaxe do perl:

grep -oP '.{32}\K[^"]*'

ele usa os primeiros 32 caracteres, corta com \K e imprime o resto até o primeiro " .

    
por 01.08.2017 / 20:00
2

Uma solução vim:

vim test.txt -c '%s/\v.{32}(.{-})".*/' -c 'w output.txt' -c 'q!'

Salva o resultado em output.txt , o que obviamente poderia ser alterado.

    
por 01.08.2017 / 19:56
2

No bash e expressão de expansão de parâmetro

$ nline="${line%%\"*}" #strip everything from first " seen to the end
$ echo "${nline:32}"   #print everything from offset 32 to the end
    
por 01.08.2017 / 20:45
1

Você pode usar sed para realizar sua tarefa

sed -e 's/^.\{32\}//;s/".*//' filename.txt

Isso remove os primeiros 32 caracteres e remove tudo após o primeiro " .

Essas substituições ocorrerão em todas as linhas do arquivo. Para aplicar isso a uma linha específica, use isto:

sed -e 'linenumber{s/^.\{32\}//;s/".*//;}' filename.txt

em que linenumber é qualquer número.

linenumber{          # on the linenumber-th line, do the following
 s/^.\{32\}//        #  remove the first 33 characters
 s/".*//             #  remove the first quote and everything following it
}
    
por 01.08.2017 / 20:05

Tags