La domanda più o meno dice tutto. Sono consapevole che /^$/d
rimuoverà tutte le righe vuote, ma non riesco a vedere come dire "sostituisci due o più righe vuote con una singola riga vuota"
Qualche idea?
La domanda più o meno dice tutto. Sono consapevole che /^$/d
rimuoverà tutte le righe vuote, ma non riesco a vedere come dire "sostituisci due o più righe vuote con una singola riga vuota"
Qualche idea?
Risposte:
Se non stai sparando vim o sed per qualche altro uso, cat ha in realtà un modo semplice per comprimere più righe vuote, basta usare cat -s
.
Se eri già in vim e volessi rimanere lì, potresti farlo con la ricerca interna e sostituirlo emettendo: :%s!\n\n\n\+!^M^M!g
(La ^ M è la rappresentazione visiva di una nuova riga, puoi accedervi premendo Ctrl+ vEnter), o salvando te stesso il digitando semplicemente sborsare al gatto: :%!cat -s
.
:%!cat -s
. Scopri qualcosa di nuovo ogni giorno!
%s!\n\n\n\+!\r\r!g
Utilizzare \n
per indicare una nuova riga nel modello di ricerca. Usa Ctrl+ Mnel testo sostitutivo o un riferimento indietro. Vedi :help pattern
e :help sub-replace-special
(collegato da :help :s
).
%s/\(\n\n\)\n\+/\1/
\n
non funziona nel testo sostitutivo.
Se in Vim, basta fare questo:
:%!cat -s
man
pagina.
Utilizzando Perl:
perl -00 -pe ''
-00
l'opzione della riga di comando attiva la modalità slurp del paragrafo, il che significa che Perl legge il testo paragrafo per paragrafo anziché riga per riga.
Con sed (GNU sed) 4.2.2:
sed -r '
/^\s*$/ {
# blank line
:NEXT
N # append next line to pattern space - if none, autoprint PS and exit
s/^\s*$\n^\s*$//g;t NEXT # if 2 blank lines, clear PS and loop to NEXT
}
# else, autoprint PS and next/exit
' < $MYFILE
So che questo è un codice sciocco, ma volevo risolvere questo problema in meno di 10 minuti e ha funzionato
for file in /directory/*
do
originalname=$file
us='_'
tempname=$file$us
echo $originalname
mv $originalname $tempname
uniq $tempname $originalname
rm $tempname
done
uniq
rimuove le linee uguali adiacenti. Che non è quello che vuole OP.
-s
opzione di cat - solo una nota storica, non è in POSIX, ma sembra essere disponibile in BSD e GNU cat.