Con sed
o awk
o lo que sea, ¿cómo reemplazar líneas vacías seguidas de una cadena específica (por ejemplo &
o \end{align}
) por esta cadena (por lo tanto &
o \end{align}
)?
Como ejemplo, aquí está el archivo inicial (editar: ejemplo menos ambiguo):
The quick brown fox jumps over the sleazy dog.
Indeed, the quick brown fox jumps over the sleazy dog.
\begin{align}
& foo
& bar
\end{align}
The quick brown fox jumps over the sleazy dog.
Indeed, the quick brown fox jumps over the sleazy dog.
y esto es lo que me gustaría obtener:
The quick brown fox jumps over the sleazy dog.
Indeed, the quick brown fox jumps over the sleazy dog.
\begin{align}
& foo
& bar
\end{align}
The quick brown fox jumps over the sleazy dog.
Indeed, the quick brown fox jumps over the sleazy dog.
Respuesta1
GNU sed
con soporte extendido para expresiones regulares (-E) para ayudar en la escritura de expresiones regulares.
sed -Ei -e '
/./b
:a
$q;N
/\n$/ba
s/^\n+(&|\\(begin|end)\{align\})/\1/
' file
La idea es comenzar a recopilar líneas vacías y detenerse cuando se vea una línea no vacía. Luego, la expresión regular comprobará si el fragmento de líneas vacías va seguido de alguna de las siguientes tres líneas:
- una línea que comienza con un signo comercial
&
- una línea que comienza con \begin{align}
- una línea que comienza con \end{align}
Luego eliminamos estas líneas vacías específicas.
Respuesta2
Con pcregrep
en modo multilínea:
pcregrep -M '^(?!\s+^(&|\Q\end{align}\E))' < file
greps para inicios de líneas que no van seguidos de uno o más espacios en blanco (incluye nueva línea), el inicio de otra línea y marchitamiento &
o \end{align}
.
O con perl
:
perl -0777 -pe 's/^\s+^(&|\Q\end{align}\E)/$1/gm' < file
Respuesta3
Esto eliminatodolíneas en blanco en el bloque de alineación:
sed '/\\begin/,/\\end/ { /^$/d; }' file
El punto y coma es necesario para BSD sed en mi Mac pero no para GNU sed.
Es más complicado hacer coincidir tipos de bloques específicos. El método sencillo es
sed '
/\\begin{align}/,/\\end{align}/ { /^$/d; }
/\\begin{equation}/,/\\end{equation}/ { /^$/d; }
' file