¿Es posible hacerlo de una sola vez?
Tengo una salida como esta:
"First line" - Description
" Second line" - Description
"Third line" - Description
" Fourth line" - Description
Esta entrada se genera automáticamente.
Quiero reemplazar la primera aparición de "
(comillas + espacio) con "
(comillas) para cada línea. Si aplico la sustitución a nivel mundial, también cambiará cada aparición de line" -
a line"-
, por lo que me preguntaba si es posible usar un revestimiento de un solo sed para lograr esto.
He intentado usar ^
así
sed -r ':a;N;$!ba;s/(\^\" )/\"/g'
Pero no está funcionando, no reemplaza nada. Lo intenté
sed -r ':a;N;$!ba;s/(^|\" )/\"/g'
y reemplaza todas las ocurrencias. Acabo de empezar a usar sed, así que no sé si estoy haciendo algo mal.
¿Que me estoy perdiendo aqui?
sed
regular-expression
Steve B.
fuente
fuente
sed
, pero para la portabilidad y para evitar errores realmente extraños, debe finalizar un argumento de comando dado después de una etiqueta (si es que los necesita). Por ejemplosed -e ':a' -e 'N;$!ba' -e 'whatever'
Respuestas:
Lo estás pensando demasiado.
sed
reemplaza solo la primera instancia en una línea de manera predeterminada (sin el/g
modificador), aunque todavía desea anclar porque no desea tanto la primera instancia en la línea como la que está al comienzo de la línea; y generalmente no necesita las acciones de línea explícitas que está tratando de usar (¿por qué?).fuente
sed
comandos de varias líneas comoN
y las etiquetas como:a
no son obsoletos en absoluto y son portátiles y POSIX especificados , a diferencia de Perl / Python / Ruby / lo que sea. Sin embargo, es cierto que si los necesita con frecuencia, debe aprenderawk
.Una respuesta más general, ya que no puedo comentar sobre la respuesta de geekosaur: no pondrías el ^ (inicio del ancla de línea). Por ejemplo, si desea reemplazar la primera aparición de A con B, tendría
fuente