Mi piacerebbe utilizzare sed per rimuovere le schede da linee altrimenti vuote. Ad esempio una riga contenente solo \t\n
dovrebbe passare a \n
. Qual è la sintassi per questo?Come rimuovere le schede dalle righe vuote usando sed?
risposta
sed
non sa di sequenze di escape come \t
. Quindi, si dovrà digitare letteralmente tab
sulla console:
sed 's/^ *$//g' <filename>
Se siete su bash, allora non è possibile digitare tab
sulla console. Dovrai fare ^V
e quindi premere tab
. (Ctrl-V
e quindi tab
) per stampare una scheda letterale.
L'altra soluzione pubblicata funzionerà quando è presente la scheda 1 (e solo 1) nella riga. Nota che Raze2dust fa notare che sed richiede di digitare una scheda letterale. Un'alternativa è:
sed '/[^ ]/!s/ //g' file-name.txt
Quale sostituisce le schede da linee che hanno solo schede. La classe invertita combacia con le righe che contengono un bug di qualsiasi tipo: il seguente '!' fa sì che non corrisponda a quelle linee - cioè solo le linee che hanno solo schede. La sostituzione quindi funziona solo su quelle linee, rimuovendo tutte le schede.
Per sostituire le linee di spaziatura arbitrari con una riga vuota, utilizzare
sed -r 's/^\s+$//'
Il flag -r dice di usare le espressioni regolari estese, e il^\ s + $ modello corrisponde tutte le linee con un po 'di spazio bianco, ma nessun altro carattere .
grep -o ".*" file > a; mv a file;
E questo fa esattamente? Perché non fa quello che l'OP chiedeva. –
non sicuro se trolling, ma se così, brillante .... – ansiart
Ho notato che \ t non è riconosciuto da UNIX. Detto questo, usa la chiave attuale. Nel codice sottostante, TAB rappresenta premendo il tasto tab.
$ sed 's/TAB // g' vecchiofile> nuovofile
punta amichevole: per assicurarsi di avere le schede nel file che si sta tentando di rimuovere le schede da utilizzare il seguente codice per vedere se \ t appare
$ od -c nomefile
Se si utilizza bash, si potrebbe anche fare 'sed $ 's/^ \ t * $ // g'', perché l'utilizzo di un segno di dollaro su una stringa con una singola quotazione sfugge codici come \ t. –
bravo uno Max! Non lo sapevo. Dovresti metterlo come risposta separata .. –
Il tuo è abbastanza vicino. :) –