Quale comando unix possiamo usare per aggiungere del testo a una riga specifica in un file?

StackOverflow https://stackoverflow.com/questions/602921

  •  03-07-2019
  •  | 
  •  

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

È stato utile?

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top