¿Hay alguna forma de poner en mayúsculas / minúsculas solo un carácter en alguna cadena?
Ejemplo de entrada:
syslog_apr_24_30
syslog_mar_01_17
Salida deseada:
syslog_Apr_24_30
syslog_Mar_01_17
Tenga en cuenta por favor el principio mayúscula del mes.
Lo he intentado awkpero no soy lo suficientemente bueno para que funcione.

sed 's/_./\U&/'awk:
fuente
Awkversión con subcadenas y toupperEjecución de muestra:
fuente
Utilizando
awk:o
Ejemplo
fuente
Aquí hay un enfoque de Perl:
La
-pcausa cada línea impresa después de aplicar a la secuencia de comandos dada por-e. La sustitución reemplaza la primera instancia de_y el carácter que la sigue con ellos mismos ($&es lo que fue emparejado) mayúscula (uc()), se necesitaeal final del operador de sustitución (s///e) para evaluar las expresiones.fuente
Otro
perl:fuente
Pure Bash 4.x, utilizando una expresión regular para seleccionar la parte que desea aumentar y el
^^operador de mayúsculas en esa parte. Tachado en la parte delantera y trasera (emparejado por. *) Para volver a crear la cadena completa:Si no recuerda todas las reglas de comillas, es seguro citar todo excepto la expresión regular (que haría
=~una coincidencia de cadena literal).El
^operador upcase-first solo funciona al comienzo de una variable (o elemento de matriz). Y no parece haber ninguna expansión de subcadena que le proporcione lo que Perl llamaría un valor (que puede asignar / modificar). Los operadores de mayúsculas / minúsculas pueden tomar un patrón que coincida por carácter, pero eso no ayuda a saltarsyslog_, ya que hay nombres de meses que comienzan con caracteres en "syslog".De todos modos, esto podría ser más rápido que
foo="$(echo "$foo" | sed 's/_./\U&/')"(publicado como un comentario a la respuesta aceptada, por Glenn Jackman).Bash, sed o awk serán MUCHAS veces más rápido que perl. Si comienza a encontrar varias líneas de unl perl útiles en un script de shell, simplemente debe escribir todo en perl.
fuente
Si el mes siempre sigue al primer "_" (guión bajo), entonces use esto (como se muestra en otras respuestas):
Si puede haber otros guiones bajos antes del anterior al mes, entonces lo anterior no funcionará.
Si el mes siempre comienza con el octavo carácter, use esto:
fuente