Comando Sed che funziona su MacOS (almeno, OS 10) e Unix (cioè non richiede gnu sed come Gilles (attualmente accettato)):
sed -e '/CLIENTSCRIPT="foo"/a\'$'\n''CLIENTSCRIPT2="hello"' file
Funziona in bash e forse anche in altre shell che conoscono lo stile di quotazione di valutazione $ '\ n'. Tutto può essere su una riga e funzionare con i comandi sed / POSIX precedenti. Se potrebbero esserci più righe corrispondenti a CLIENTSCRIPT = "foo" (o il tuo equivalente) e desideri aggiungere la riga aggiuntiva solo la prima volta, puoi rielaborarla come segue:
sed -e '/^ *CLIENTSCRIPT="foo"/b ins' -e b -e ':ins' -e 'a\'$'\n''CLIENTSCRIPT2="hello"' -e ': done' -e 'n;b done' file
(questo crea un ciclo dopo il codice di inserimento della riga che scorre semplicemente attraverso il resto del file, non tornando mai più al primo comando sed).
Potresti notare che ho aggiunto un '^ *' al modello di corrispondenza nel caso in cui quella riga venga visualizzata in un commento, diciamo, o sia rientrata. Non è perfetto al 100% ma copre alcune altre situazioni che potrebbero essere comuni. Regola come richiesto ...
Queste due soluzioni risolvono anche il problema (per la soluzione generica di aggiungere una linea) che se la tua nuova linea inserita contiene barre rovesciate o e commerciali senza caratteri di escape, saranno interpretate da sed e probabilmente non usciranno allo stesso modo, proprio come lo \n
è - ad es. \0
sarebbe la prima riga abbinata. Particolarmente utile se stai aggiungendo una riga che proviene da una variabile in cui altrimenti dovresti sfuggire a tutto prima usando $ {var //} o un'altra istruzione sed ecc.
Questa soluzione è un po 'meno complicata negli script (che la quotazione e \ n non è facile da leggere però), quando non si desidera inserire il testo sostitutivo per il comando a all'inizio di una riga, se si dice, in una funzione con linee rientrate. Ho approfittato del fatto che $ '\ n' viene valutato dalla shell come una nuova riga, non è in normali '\ n' valori tra virgolette singole.
Sta diventando abbastanza lungo anche se penso che perl / perfino awk potrebbe vincere a causa della maggiore leggibilità.