Je suis nouveau en programmation !!
Quelqu'un peut-il aider à supprimer :
la première position dans un horodatage::29.06.2019 23:03:17
Actuellement, j'essaie de le faire en utilisant les commandes awk / cut comme indiqué ci-dessous:
TDS="$(grep 'Logfile started' process.log | awk '{print $3,$4}' | cut -d: -f2)"
echo "$TDS"
29.06.2019 23
Et la sortie n'est pas ce que je voulais! Je veux l'imprimer comme 29.06.2019 23:03:17
.
la source
Voici une
sed
solution:La commande
sed 's/^://'
remplaces
le caractère deux-points:
du début^
de chaque ligne par la chaîne vide//
.Voici une
awk
solution délicate , où nous changeons le séparateur de champ en^:
, décrit ci-dessus, et sortons le deuxième champ (de chaque ligne):La tâche pourrait également être accomplie avec
grep
( explication ), cela pourrait probablement être la solution la plus rapide pour une grande quantité de données:Ou traitez le fichier directement par la commande suivante, où la limitation
^
est supprimée:Les objectifs ci-dessus pourraient également être atteints par des
sed
groupes de capture()->\1
:Où l'expression
^.*<something>.*$
correspondra à toute la ligne, qui contient<something>
. La commandes/old/new/
remplacera cette ligne par le contenu du premier groupe de capture (l'expression entre crochets pourrait être plus concrète). L'option-r
active les expressions régulières étendues. L'option-n
supprimera la sortie normale desed
et enfin la commandep
affichera les correspondances.la source
awk
pouvait y avoir un FS multi-caractères avec des caractères avec une signification spéciale! Chose que j'ai apprise aujourd'hui.Puisque vous traitez déjà cela
awk
, vous pouvez aussi bien faire le tout directement:Le
sub
format général de la commande estsub(/REGEX/, REPLACEMENT, TARGET)
et remplacera toutes les correspondances de l'expression régulièreREGEX
par la chaîneREPLACEMENT
dans la chaîne d'entréeTARGET
. Ici, nous remplaçons le premier:
(^
signifie "le début") du 3e champ ($3
) par rien.Bien sûr, si vous faites cela dans awk, vous pouvez aussi bien tout faire dans awk et faire le tout en une seule opération:
Ou, dans votre cas:
la source
Une autre solution bash:
xargs
convertitstdin
(entrée standard) en paramètres positionnels pour labash
commande.echo
partail -n1 /path/to/reportfile.txt
.la source