GNU/Linux >> Linux Esercitazione >  >> Linux

Sed On Osx inserisce a una certa linea?

Quindi uso "sed" su Linux da un po' di tempo, ma ho avuto un po' di difficoltà a provare a usarlo su OSX poiché "POSIX sed" e "GNU sed" hanno così tante piccole differenze. Attualmente sto lottando con come inserire una riga di testo dopo un certo numero di riga. (in questo caso, riga 4)

Su Linux farei qualcosa del genere:

sed --in-place "4 a\  mode '0755'" file.txt

Quindi su OSX ho provato questo:

sed -i "" "4 a\ mode '0755'" file.txt

Tuttavia, questo continua a darmi un errore "caratteri extra dopo \ alla fine di un comando". Qualche idea su cosa c'è che non va qui? Ho un errore di battitura? Oppure non capisco un'altra differenza tra le versioni di sed?

Risposta accettata:

A rigor di termini, la specifica POSIX per sed richiede una nuova riga dopo a\ :

[1addr]a\
text

Scrivere il testo nell'output standard come descritto in precedenza.

Questo rende la scrittura di battute un po' una seccatura, che è probabilmente la ragione della seguente estensione GNU a a , i e c comandi:

Come estensione GNU, se compresa tra a e la nuova riga è diversa da uno spazio bianco-\ sequenza, quindi il testo di questa riga, a partire dal primo carattere non di spazi bianchi dopo il a , viene presa come prima riga del testo bloccare. (Ciò consente una semplificazione nello scripting di un'aggiunta di una riga.) Questa estensione funziona anche con i e c comandi.

Quindi, per essere portabile con il tuo sed sintassi, dovrai includere una nuova riga dopo a\ in qualche modo. Il modo più semplice è inserire semplicemente una nuova riga tra virgolette:

$ sed -e 'a\
> text'

(dove $ e > sono prompt della shell). Se lo trovi fastidioso, bash [1] ha il $' ' citando la sintassi per inserire gli escape in stile C, quindi usa semplicemente

sed -e 'a\'$'\n''text'

[1] e mksh (r39b+) e alcune shell bourne non bash (ad esempio, /bin/sh in FreeBSD 9+)


Linux
  1. Converti stringa in esadecimale sulla riga di comando

  2. Qual è il modo corretto di inserire la scheda in sed?

  3. Come inserire un testo all'inizio di un file?

  4. sed da inserire solo alla prima corrispondenza

  5. sed - inserisce riga dopo X righe dopo la corrispondenza

Come inserire del testo all'inizio di ogni riga in Vim

Sed può sostituire i caratteri di nuova riga?

Rimuovere la riga contenente una determinata stringa e la riga seguente?

Utilizzo del comando Linux sed con esempi

Tutorial Unix Sed:aggiungi, inserisci, sostituisci e conta righe di file

Sostituzione Sed multilinea