Pregunta

Estoy intentando hacer una búsqueda y reemplazar en VI para eliminar una marca de tiempo. Usualmente hago esto en VI usando el comando S, pero ¿cómo le digo a VI que necesito eliminar dos puntos cuando es parte de la estructura del comando VI en sí?

EX: " xxxxx xxxxx 24:00:00 CDT "

probado

s: 24: 00: 00 CDT :: g

s: " 24: 00: 00 CDT " :: g

s:/:::g

Cualquier ayuda es apreciada.

¿Fue útil?

Solución

Normalmente, vi usa el carácter que sigue a la letra de comando como separador.

Prueba esto:

s!24:00:00 CDT!!g

Otros consejos

El problema aquí no es hacer coincidir dos puntos, sino que se le ha enseñado que vim DEBE usar dos puntos para separar su expresión regular. Esto es incorrecto.

awk / vi / perl / ruby ??(y muchos más) le permiten especificar el delimitador que desee. Este carácter es el que sigue al carácter de comando (en nuestro caso, una S), por ejemplo:

s/hello/there/
s:hello:there:
s@hello@there@

son todos la misma expresión regular, solo que con diferentes delimitadores. Esta flexibilidad significa que si a menudo usa /, pero luego necesita hacer coincidir a / en la expresión regular, puede cambiar a otro delimitador, por ejemplo:

sMhel/loMthereM

Aunque " M " podría no ser la mejor opción cuando la expresión regular contiene texto; depende de su estilo y de lo que realmente coincida.

Incluso puedes usar corchetes. Para una sola expresión regular es:

s[hello]

o

s(hello)

Creo que para el estilo de búsqueda y reemplazo puede usar s [hola] [allí] o posiblemente incluso s [hola] (allí) . Pero esta última oración sobre los corchetes es una conjetura medio recordada de cuando ya usaba perl.

En mi versión de vi, puedo hacer lo siguiente para eliminar dos puntos de una línea. YMMV.

:s/://g

s / \ d \ +: \ d \ +: \ d \ + CDT // g funciona para mí:

contenido inicial:

xxxxx xxxxx 24:00:00 CDT

después del comando:

xxxxx xxxxx

si desea asegurarse de que solo afectará a las marcas de tiempo (como está, la expresión regular anterior cambia cualquier número de dígitos > 1), use

s/\d\d:\d\d:\d\d CDT//g

donde la g final cambia todas las apariciones del patrón, no solo la primera.

Si tiene más de una zona horaria en la lista, agrúpelas:

:s/\d\+:\d\+:\d\+^Y \(CDT\|UDT\)//g

No es realmente parte del comando, ya que debería permitirle usar cualquier delimitador que desee.

Probablemente lo intente: -

%s/\d\{2}:\d{2}:\d{2}//g
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top