Adicione palavras a um arquivo de texto usando um único comando de terminal (sem editores)

15

Sou novo no Linux. Preciso editar um arquivo .conf apenas do terminal aberto e não usar editores de texto. Ou seja, posso adicionar palavras e frases a um arquivo de configuração de um terminal aberto?

Exemplo: command /home/.../file.conf -add 'abcd' para a 23ª linha e assim por diante. E finalmente, salve.

É possível pesquisar uma palavra específica nesse arquivo de configuração e adicionar um novo texto à próxima linha desse arquivo de configuração usando apenas o comando?

    
por user259060 17.03.2014 / 07:31

5 respostas

27

Geralmente faço isso quando estou programando meu script para fazer o mesmo que você está pedindo, mas programaticamente.

echo "Hello you!" >> myfile.txt
echo "this is 2nd line text" >> file.txt
echo "last line!" >> file.txt

Voila! Você entendeu. Importante notar que >> significa adicionar nova linha ao arquivo existente, enquanto > simplesmente sobrescreve tudo.

    
por Faron 17.03.2014 / 08:04
16

Adicionar palavras e frases a um arquivo de configuração a partir do terminal aberto pode ser facilmente alcançado com sed.

sed -i '23iabcd' file.conf

insere na linha 23 o texto abcd no arquivo file.conf

-i faz a modificação diretamente no arquivo file.conf .

Se você quiser usar awk , então:

awk -v n=23 -v s="abcd" 'NR == n {print s} {print}' file > file.conf

O seguinte adiciona uma linha após o SearchPattern.

sed -i '/SearchPattern/aNew Text' SomeFile.txt

Insere o Novo Texto uma linha abaixo de cada linha que contém o SearchPattern.

Para adicionar duas linhas, você pode usar um \ e inserir uma nova linha ao digitar Novo texto.

 sed -i '/pattern/a \
line1 \
line2' inputfile
    
por Stormvirux 17.03.2014 / 08:07
3

Você também pode usar o comando printf .

Para adicionar linhas ao seu arquivo

$ printf "\nThis is a new line to your document" >> file.txt

Para substituir o arquivo

$ printf "This overwrites your file" > file.txt
    
por rafaelbattesti 20.02.2015 / 15:56
0
awk '{if ( ~ /regex/) print  "content to be added"; else print }' < inputfile > outputfile

Notas:

  • regex é uma expressão regular (também conhecida como regex), define os critérios de pesquisa. Expressões regulares permitem buscas muito personalizáveis e a sintaxe compreendida pelo awk é no manual . No caso mais simples - pesquise uma string "como ela é", caractere por caractere - basta colocar uma barra invertida antes de caracteres especiais (consulte o manual para a lista de caracteres especiais)

Como funciona:

  • abra inputfile para ler as linhas de entrada, limpe outputfile e abra-o para escrever as linhas de saída
  • para cada linha, execute o bloco entre chaves:
    • se a linha corresponder à expressão regular, envie a linha com o conteúdo anexado
    • caso contrário, imprima a mesma linha.
por ignis 17.03.2014 / 08:00
0

Eu encontrei uma solução para minha própria pergunta usando o comando ed

ed -s /home/.../abc.conf <<< $'23i\ntext\n.\nwq'

O texto pode conter 27 linhas. Você pode copiar 27 linhas de um arquivo de texto e colar 27 linhas no seu arquivo de configuração. Mas preciso executar o comando ed simultaneamente para adicionar mais texto ao mesmo arquivo de configuração.

    
por user259060 18.03.2014 / 13:16