it-swarm-eu.dev

Come aggiungere una stringa alla fine di una riga specifica in un file in bash

Voglio aggiungere un alias alla fine di una determinata riga del mio file hosts. Per esempio

Io ho

192.168.1.1    www.address1.com
192.168.1.2    www.address2.com
192.168.1.3    www.address3.com

Voglio che assomigli

192.168.1.1    www.address1.com
192.168.1.2    www.address2.com myalias
192.168.1.3    www.address3.com

Voglio trovare la riga che contiene 19.2.68.1.2 e aggiungere mialie alla fine. La linea non è necessariamente la seconda riga nel file come ho mostrato qui. Potrebbe essere ovunque.

13
Chris F

Usando sed e lo schema descritto:

sed '/192.168.1.2/s/$/ myalias/' file

Utilizzando sed e un numero di riga specifico:

sed '2s/$/ myalias/' file
33
Steve

È anche possibile una soluzione awk:

awk '{if (/^192\.168\.1\.2 /) {$0=$0 " myalias"}; print}' hosts

Il precedente legge le righe dal file hosts uno alla volta. Se la linea ha il nostro indirizzo IP all'inizio, allora myalias viene aggiunto alla linea. La linea viene quindi stampata in stdout.

Nota due cose. C'è uno spazio dopo l'indirizzo IP nella condizione if. Altrimenti, la regex potrebbe corrispondere a 192.168.1.20 ecc. Inoltre, i periodi nell'indirizzo IP sono sfuggiti con barre retroverse. Altrimenti, potrebbero corrispondere a qualsiasi personaggio.

Una forma pithier della soluzione è:

awk '/^192\.168\.1\.2 /{$0=$0 " myalias"}1' hosts
1
John1024

Vorrei andare con awk, dal momento che è possibile utilizzare le stringhe e non è necessario utilizzare espressioni regolari, in cui i punti dovrebbero essere sfuggiti e le ancore e/oi limiti di Word dovrebbero essere utilizzati. Inoltre puoi assicurarti che la stringa corrisponda a un valore nella colonna 1.

awk '$1==s{$0=$0 OFS alias}1' s=192.168.1.2 alias=myalias file

Inoltre, quando fa parte di uno script più grande, è bello poter utilizzare stringhe variabili. Con sed avresti bisogno delle variabili Shell e cito l'inganno ..

0
Scrutinizer

Ecco un altro modo usando awk

awk '/search pattern/{print $0 " myalias"; next}1'  file
0
jaypal singh