Comment ajouter une chaîne après chaque ligne d'un fichier à l'aide de bash? Peut-on le faire en utilisant la commande sed, si oui comment?
Si votre sed
permet l'édition en place via le -i
paramètre:
sed -e 's/$/string after each line/' -i filename
Sinon, vous devez créer un fichier temporaire:
typeset TMP_FILE=$( mktemp )
touch "${TMP_FILE}"
cp -p filename "${TMP_FILE}"
sed -e 's/$/string after each line/' "${TMP_FILE}" > filename
Je préfère utiliser awk
. S'il n'y a qu'une seule colonne, utilisez $0
, sinon remplacez-le par la dernière colonne.
Une manière,
awk '{print $0, "string to append after each line"}' file > new_file
ou ca,
awk '$0=$0"string to append after each line"' file > new_file
Si vous en avez, l'utilitaire lam (stratifié) peut le faire, par exemple:
$ lam filename -s "string after each line"
Pure POSIX Shell et sponge
:
suffix=foobar
while read l ; do printf '%s\n' "$l" "${suffix}" ; done < file |
sponge file
xargs
et printf
:
suffix=foobar
xargs -L 1 printf "%s${suffix}\n" < file | sponge file
Utiliser join
:
suffix=foobar
join file file -e "${suffix}" -o 1.1,2.99999 | sponge file
Outils shell utilisant paste
, yes
, head
& wc
:
suffix=foobar
paste file <(yes "${suffix}" | head -$(wc -l < file) ) | sponge file
Notez que paste
insère un caractère Tab avant $suffix
.
Bien entendu, sponge
peut être remplacé par un fichier temporaire, puis mv
'd sur le nom de fichier d'origine, comme pour d'autres réponses ...