Estoy luchando con un comando sed. Estoy tratando de lograr esto:
Input: 03:23PM
Output: 15:23PM
Mi comando sed que he probado:
echo $line | sed 's/03:..PM/15:..PM/g
Para recordar parte de la prueba de reemplazo, use paréntesis. Para referirse al primer par de paréntesis, use \1 :
sed 's/03:\(..\)PM/15:\1PM/g' De hecho, puede hacer que tanto : como PM parte del grupo de captura:
sed 's/03\(:..PM\)/15\1/g'Usando sed
$ sed '/[0-9:]*[AP]M/s/^[^:]*/15/' <<< $line 15:23PMO usando la solución @dawg para manejar múltiples rangos
sed "/PM/s/^[^:]*/echo \$((&+12))/e" <<< $line 15:23PMawk para que obtenga una adición real y pueda detectar AM vs PM :
echo '03:23PM 11:33PM 03:23AM' | awk 'BEGIN{FS=OFS=":"} /PM/ && $1<12 {$1=$1+12} 1'Huellas dactilares:
15:23PM 23:33PM 03:23AM