80 votes

Commande pour ajouter une chaîne de caractères à chaque ligne ?

Vous cherchez quelque chose comme ça ? Vous avez des idées ?

cmd | prepend "[ERRORS] "

[ERROR] line1 text
[ERROR] line2 text
[ERROR] line3 text
... etc

4voto

Aprotim Points 41

Je voulais une solution qui gère stdout et stderr, donc j'ai écrit prepend.sh et le mettre sur mon chemin :

#!/bin/bash

prepend_lines(){
  local prepended=$1
  while read line; do
    echo "$prepended" "$line"
  done
}

tag=$1

shift

"$@" > >(prepend_lines "$tag") 2> >(prepend_lines "$tag" 1>&2)

Maintenant je peux juste lancer prepend.sh "[ERROR]" cmd ... pour ajouter "[ERROR]" à la sortie de l'application cmd et avoir toujours stderr et stdout séparés.

3voto

scorpp Points 121
cmd | xargs -L 1 -i echo "prefix{}"

ou encore plus facilement dans le cas prefix est séparée de la ligne elle-même par un espace

cmd | xargs -L 1 echo prefix

Ce n'est pas très efficace du point de vue des performances, mais c'est court à écrire.

Il fonctionne en exécutant echo une fois pour chaque ligne d'entrée. xargs vous permet également de traiter \0 -lignes délimitées.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X