Mi comando sed es,
sed '/(.*:)/d' <<< 'abcd:bcde:cdeaf'
Debe volver,
bcde:cdeaf
(es decir, todos los caracteres anteriores al primer colon de la línea y el mismo colon deben eliminarse).
Pero esto no elimina nada.
Mi confusión surge principalmente debido a,
1) ¿Es necesario escapar a los parens para la coincidencia de patrones dentro de las expresiones regulares sed?
2) En cualquier caso (con escape / sin escpaing), no está funcionando. Lo intenté,
sed -E '/\\(.*:\\)/d' <<< 'abcd:bcde'
sed 's/[^:]*://'
. Y no estád
eligiendo la línea de entrada, por cierto, la está modificando con uns///
comando de sustitución. Debe reemplazar el primer bit que no es de dos puntos y el punto que le sigue con nada en absoluto.printf "%s\n" "${line#*:}"
...while read line
que obtiene el$line
, probablementesed
debería preferirse.Respuestas:
El primero
^
significa el comienzo de la línea. El[^:]
es simplemente la única manera que sé cómo escribir no dos puntos . El*
después de los dos puntos significa cualquier número de las cosas bien antes que yo (en este caso la no-colon). Finalmente, el:
selecciona los dos puntos.En otras palabras, seleccione el comienzo de la línea, cualquier cantidad de cosas que no sean dos puntos y el primer punto.
Los
//g
medios eliminan cada instancia coincidente.fuente
^
anclar tu partida, excepto porque también agregas unag
bandera lobal. solo puede haber una primera aparición de un patrón, por lo que lag
bandera lobal no elimina todos los[^:]*:
patrones de una línea, como lo haría si no lo^
anclaras. en lugar de complicar la expresión regular con dos indicadores innecesarios que solo sirven para desequilibrar el uno al otro, simplemente puede dejarlos fuera, que es lo que demostró la versión editada de esta respuesta antes de revertirla. ¿Por qué insistes en difundir mala información? No lo sé, pero es una mala respuesta.sed
habilidades. Soy nuevosed
y todavía no me siento cómodo alejándome de la sintaxis muy limitada que he recogido hasta ahora. Esosed
(je), creo que mi respuesta resuelve el problema de OP a pesar de que no es la respuesta óptima (es decir, su). Este es Stack Exchange, no Wikipedia, así que corrígeme si estoy equivocado, pero si sabes una mejor respuesta, debes publicarla para que la gente pueda ver la variedad de enfoques y compararlos. No convierta mi respuesta en su respuesta con la función de edición .Para operar con columnas hay
cut
:lo mismo hacer
Y otra versión con
sed
(más rápido para big data):Y bastante exótico en
bash
o
o
fuente
sed 's/[^:]*://'