Quale comando unix possiamo usare per aggiungere del testo a una riga specifica in un file?
Domanda
Qualcuno conosce una serie di comandi unix che consente a qualcuno di aggiungere del testo alla fine di una riga specifica in un file?
es
Riga 1
Riga 2
Riga 3
Riga 4
Desidero aggiungere il testo " ;, informazioni aggiuntive " alla riga 3 in modo che il file ora assomigli a questo:
Riga 1
Riga 2
Riga 3, informazioni extra
Riga 4
Soluzione
Perl:
perl -p -e's{\n}{, extra information\n} if $. ==3' myfile
$. è il numero di riga
Altri suggerimenti
in awk è:
awk '{s=sed -e '3s/$/, Extra Information/' -i myfile
; if( NR==3 ){ s=s ", Extra Information" } print s;}' myfile > newfile
versione corretta di sed:
<*> Ecco una versione con sed
portatile (senza opzione -i):
sed '3s/$/Hello World/' myfile
Nota che myfile
non è modificato, quindi puoi recuperare da possibili errori.
awk 'NR == 3 { print somecommand > oldfile.tmp && mv oldfile.tmp oldfile
", extra information" } NR != 3' myfile
La parte prima delle parentesi graffe è la condizione : se siamo nella riga 3, aggiungeremo del testo. Se le parentesi graffe vengono omesse, l'azione predefinita è semplicemente stampare $ 0
. Reindirizzare a un nuovo file o pipe su un altro programma come appropriato. Non puoi reindirizzare allo stesso file che stai solo leggendo. Una soluzione alternativa comune è il reindirizzamento a un nuovo file, quindi passare se il comando ha esito positivo:
sed -e "s/^Line 3/\0, extra info/" -i text.txt
Se si desidera che le informazioni aggiuntive vengano aggiunte a una sola riga, verrà eseguita una riga singola di sed / awk.
Se vuoi aggiungere qualcosa a (quasi) ogni riga del file, dovresti creare un secondo file con le informazioni extra per ogni riga e usare incolla
:
$ cat myfile
line 1
line 2
line 3
line 4
$ cat extra
something
something else
$ paste myfile extra
line 1 something
line 2
line 3 something else
line 4