Aggiungi parole a un file di testo usando un singolo comando terminale (senza editor)


22

Sono nuovo di Linux. Devo modificare un .conffile solo dal terminale aperto e non usare alcun editor di testo. Cioè, posso aggiungere parole e frasi a un file di configurazione da un terminale aperto?

Esempio: command /home/.../file.conf -add 'abcd'alla 23a riga e così via. E infine, salvalo.

È possibile cercare una parola specifica in quel file di configurazione e aggiungere nuovo testo alla riga successiva di quel file di configurazione usando solo il comando?


1
Sembra che sedpossa venire in aiuto.
nitishch

1
Fai una sola domanda.
Avinash Raj,

Risposte:


39

Di solito lo faccio in questo modo quando sto programmando il mio script per fare lo stesso per quello che mi stai chiedendo ma programmaticamente.

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

Ecco! Avete capito bene. È importante notare che >>significa aggiungere una nuova riga al file esistente nel frattempo >semplicemente sovrascrivere tutto.


grazie per la tua pronta risposta. Ma devo aggiungere sequenzialmente più di 3000 parole alla 23a riga del mio file .conf. C'è un modo più semplice?
user259060

20

L'aggiunta di parole e frasi in un file di configurazione da terminale aperto può essere facilmente ottenuta con sed.

sed -i '23iabcd' file.conf

inserisce alla riga 23 il testo abcdnel filefile.conf

-iesegue la modifica direttamente nel file file.conf.

Se vuoi usare awkallora:

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

Quanto segue aggiunge una riga dopo SearchPattern.

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

Inserisce Nuovo testo una riga sotto ogni riga che contiene SearchPattern.

Per aggiungere due righe, è possibile utilizzare a \e immettere una nuova riga durante la digitazione di Nuovo testo.

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

5

Puoi anche usare il printfcomando.

Per aggiungere linee al tuo file

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

Per sovrascrivere il file

$ printf "This overwrites your file" > file.txt

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

Appunti:

  • regex è un'espressione regolare (nota anche come regex), definisce i criteri di ricerca. Le espressioni regolari consentono ricerche molto personalizzabili e la sintassi compresa da awk è nel manuale . Nel caso più semplice - cerca una stringa "così com'è", carattere per carattere - inserisci una barra rovesciata prima dei caratteri speciali (vedi il manuale per l'elenco dei caratteri speciali)

Come funziona:

  • apri inputfileper leggere le righe di input, cancella outputfilee aprilo per scrivere le righe di output
  • per ogni riga, esegui il blocco tra parentesi graffe:
    • se la riga corrisponde all'espressione regolare, quindi genera la riga con il contenuto aggiunto
    • altrimenti, genera la stessa riga.

0

Ho trovato una soluzione alla mia domanda usando il edcomando

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

Il testo può contenere 27 righe. Puoi copiare 27 righe da un file di testo e incollare 27 righe nel tuo file di configurazione. Ma ho bisogno di eseguire il edcomando contemporaneamente per aggiungere più testo allo stesso file di configurazione.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.