Como obter linha de um arquivo usando o número da linha e editá-lo facilmente?

0

Eu quero saber como se pode obter o conteúdo extraído de um arquivo usando o número da linha. Eu tenho crores de linhas no arquivo e, às vezes, ao importá-lo em algum banco de dados, como o mongodb, ele gera problemas. Então eu preciso editá-lo. Mas abrir GB's de arquivos de novo e de novo só para editar uma única linha não é digno. Portanto, gostaria de saber como extrair o conteúdo de um arquivo usando seu número de linha e, em seguida, editar qualquer coisa que eu queira editar e salvá-lo no arquivo novamente, sem abrir o arquivo completamente. Diga por exemplos:

command line_number 20000 /path/to/input/file

saída:

This your first testing text.
edit line_number 20000 /path/to/input/file

Em seguida, a linha aparece e eu passo para caracteres específicos, digamos your na linha e mude para my . Agora meu novo conteúdo na linha se torna:

This is my first testing text.

Por favor, note que eu não sei se a linha tem a palavra ou não. Então, primeiro preciso verificar a linha. Exibe a linha usando o número da linha. e depois edite-o.
Existe uma maneira de alcançá-lo.
Deixe-me esclarecer todos, estou usando o UBUNTU 16.04. Esta questão é completamente baseada em UBUNTU e nenhuma outra distribuição OS ou Linux. Por favor, não isso.

    
por Jaffer Wilson 10.02.2017 / 06:39

2 respostas

3

Você pode usar sed ou perl para imprimir a linha X:

$ cat -n input.txt                                                                                    
     1  roses are red
     2  violets are blue
     3  sed is interesting
     4  and perl is too

$ perl -ne 'print $_ if $. == 3'  input.txt                                                           
sed is interesting
$ sed -n '3p' input.txt                                                                               
sed is interesting

Então você pode usar sed 'NUMBERs/WORD/NEWWORD/' file.txt

$ sed '3s/interesting/fun/'  input.txt                                                                
roses are red
violets are blue
sed is fun
and perl is too

Você também pode usar -i flag para editar o arquivo no local.

Same with Perl:

$ perl -pe 's/interesting/fun/ if $. == 3'  input.txt                                                 
roses are red
violets are blue
sed is fun
and perl is too

NOTA : Com os dois exemplos de edição, você não precisa saber se a linha contém palavras ou não. Tanto perl como sed substituirão a palavra se e somente se a linha contiver a palavra / padrão. Se isso não acontecer, a linha permanecerá a mesma.

    
por Sergiy Kolodyazhnyy 10.02.2017 / 06:52
0

Você pode usar o comando vi para editar arquivos sem abri-los:

vi -c "%s/<old_value>/<new_value>/g|wq" <file_path>

por exemplo

vi -c "%s/<100>/<200>/g|wq" /home/aditya/sample.txt

Atualização 1:

sed '<line_number>!d' <filepath> ( this will print the line)


sed -i '<line_number>s/.*/<new_text>/' <filepath>  ( this is replace everthing in line with 'new_text')

Atualização 2:

sed -i '<line_number>s/<old_text>/<new_text>/' <filepath>  ( this is replace 'old_text' with 'new_text')

Veja se isso ajuda.

    
por Aditya Thakur 10.02.2017 / 08:04