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


22

Eu sou novo no Linux. Eu preciso editar um .confarquivo apenas do terminal aberto e não usar nenhum editor de texto. Ou seja, posso adicionar palavras e frases a um arquivo de configuração a partir 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 novo texto à próxima linha desse arquivo de configuração usando apenas o comando?


1
Parece que sedpode vir para ajudar.
nitishch 17/03/14

1
Faça uma única pergunta.
precisa

Respostas:


39

Normalmente, faço isso quando estou programando meu script para fazer o mesmo que você está pedindo, mas de forma programática.

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

Voila! Você entendeu. Importante observar >>significa adicionar nova linha ao arquivo existente enquanto isso >simplesmente sobrescreve tudo.


Obrigado por sua pronta resposta. Mas eu preciso adicionar mais de 3000words à 23ª linha do meu arquivo .conf sequencialmente. Existe alguma maneira mais fácil?
user259060

20

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

sed -i '23iabcd' file.conf

insere na linha 23 o texto abcdno arquivofile.conf

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

Se você deseja usar, awkentão:

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

A seguir, adiciona uma linha após o SearchPattern.

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

Ele insere Novo texto uma linha abaixo de cada linha que contém o SearchPattern.

Para adicionar duas linhas, você pode usar a \e inserir uma nova linha enquanto digita Novo Texto.

 sed -i '/pattern/a \
line1 \
line2' inputfile

5

Você também pode usar o printfcomando

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

0
awk '{if ($1 ~ /regex/) print $1 "content to be added"; else print $1}' < inputfile > outputfile

Notas:

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

Como funciona:

  • aberto inputfilepara ler as linhas de entrada, limpe-o outputfilee abra-o para escrever as linhas de saída
  • para cada linha, execute o bloco entre chaves:
    • se a linha corresponder à expressão regular, emita a linha com o conteúdo anexado
    • caso contrário, imprima a mesma linha.

0

Encontrei uma solução para minha própria pergunta usando o edcomando

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 edcomando simultaneamente para adicionar mais texto ao mesmo arquivo de configuração.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.