¿Cómo hago que sed opere en partes específicas de una línea solamente? Y, por el contrario, ¿cómo hago que sed no funcione en partes específicas de una línea?Cómo operar solo en parte de la línea
Ejemplos:
"A a A a (A a) A (a A) a"
¿Cómo, por ejemplo, reemplazar todos los A
s con T
s única entre el (
y )
obtener:
"A a A a (T a) A (a T) a"
Y dada Ejemplo siguiente entrada:
"F f F f (F f) F (f F) f"
¿Cómo, por ejemplo, reemplazar todos los F
s con X
s pero no entre el (
y )
a obtener:
"f X f (f F) X X (f F) f "
Realicé búsquedas en Google pero no encontré nada utilizable. Supongo que es una pregunta general sobre sed. El problema es reducible a "plantillas" sed general, espero.
- que tiene de operar y A continuación, entre ellos solamente (en todas las instancias en línea dada)
- que tiene de y para operar en cualquier otro lugar que entre ellos ...
- caso especial cuando desde y hasta son la misma (entre "y" o "foo" y "FOO", etc.) tanto para 1. y 2.
Se debe trabajar con cualquier operación, no sólo la sustitución, sino también con la impresión, etc, al igual imprimiendo todo entre las cadenas "FOO" y "BAR" en cadena.
"1 2 3 BAR a b c FOO d e f BAR g a h FOO i j k BAR l m n FOO o p q"
El resultado será
" d e f i j k "
Por lo tanto, los ejemplos generales sobre la manera de hacerlo sería muy apreciada. También parece que esta pregunta es bastante común, pero aún no se encuentra un buen howto en Google. También creo que esto sería un gran desafío para responder. Por favor, tampoco proporcione ninguna pista sobre cómo hacerlo usando Perl, AWK o cualquier otra cosa que sed. Esta pregunta es realmente una pregunta solo sed.
Intenté lo mejor. Mi idea era dividir la línea en pedazos por FROM y TO (de alguna manera) y luego "de alguna manera" (todavía no sé cómo) para operar en partes pares o impares solamente o algo por el estilo. Si supiera cómo hacerlo, no preguntaría aquí. Y, es muy probable que mi idea de dividirme sea incorrecta. Es bastante difícil y solía usar sed para tareas simples solo antes. – mjf