Cette commande sed insère une balise au début d'un fichier:
sed -i "1s/^/<?php /" file
Comment puis-je insérer quelque chose à la fin de chaque fichier avec sed?
sed -e "\$aTEXTTOEND"
est le moyen le plus simple.
$
correspond à la dernière ligne (c'est une adresse sed
normale; 4aTEXTTOEND
serait inséré après la quatrième ligne), a
est la commande append et TEXTTOEND
est ce qu'il faut ajouter.
Pas besoin d'utiliser sed
dans ce cas. Que diriez-vous
echo "<?php" >> file
En supposant que vous vouliez mettre la balise php de fin dans les fichiers,
sed -i '$s/$/\n?>/' file
devrait faire l'affaire
Voir votre message d'origine pour la commande tout en un sed.
find . -type f -exec sed -i -e "1s/^/<?php /" -e "\$s/\$/ ?>/" {} \;
Utilisez la commande sed 'append (a)'. Par exemple, pour ajouter deux lignes à la fin du fichier:
sed -i -e '$a\
foo1 bar1\
foo2 bar2' file
D'une manière simple pour écrire et apporter les modifications dans le contenu à une ligne spécifique dans un fichier. Si vous souhaitez insérer quelque chose à un numéro de ligne spécifique, la commande ci-dessous peut être utilisée:
sed -i '2i i have started' sheikh.log
où 2i
- ligne numéro 2 et i signifie insertion. Si vous devez insérer à la dernière ligne, utilisez $
au lieu de 2. j'ai commencé - texte à insérer et sheikh.log
est le nom du fichier.
Nous pouvons également effectuer les modifications dans la ligne en utilisant la commande ci-dessous
sed -i '2c we have started' sheikh.log
i
est remplacé par we
.
Sans retour de ligne/chariot, ajouter du texte hello
à la fin de la ligne et éditer le fichier en place sans sortie vers le terminal
sed -i '$s/$/hello/' file
L'équivalent de votre sed -i '1s/^/<start</' file
serait:
sed -i '$s/$/>end>/' file
Cela ajoutera le texte >end>
jusqu'à la dernière ligne (sans retour à la ligne) du fichier. Bien sûr, dans ce cas (comme dans votre exemple également) il faut que le fichier contienne au moins une ligne (non vide).
L'utilisation de guillemets doubles (comme dans la réponse sélectionnée) n'est pas une bonne idée car alors le Shell essaiera de traiter chaque $
dans la chaîne. La commande se convertira en:
sed -i "\$s/\$/>end>/" file
L'utilisation de a
(ajout, fin) ou i
(insertion, début) insérera également une nouvelle ligne, exigera différents appels en BSD et GNU et aura toujours besoin d'un fichier non vide.
Pour GNU:
$ sed '1i<start<' file
$ sed '$a>end>' file
Pour BSD:
$ sed '1i\
<start<' file
$ sed '$a\
>end>' file
Ou, dans des shells qui le permettent (chaîne C):
$ sed $'1i\\\n<start<' file
$ sed $'$a\\\n>end>' file
Bien sûr, rien de plus simple que:
echo '>end>' >> file
qui fonctionne également avec des fichiers vides.
Je suppose que quiconque a cherché comment insérer/ajouter du texte au début/à la fin d'un fichier doit probablement également savoir comment faire l'autre.
cal | \
gsed -E \
-e '1i\{' \
-e '1i\ "lines": [' \
-e 's/(.*)/ "\1",/' \
-e '$s/,$//' \
-e '$a\ ]' \
-e '$a\}'
Il s'agit de cal
sortie dirigée vers gnu -sed
(appelée gsed
sur macOS installé via brew.sh ) avec RegEx étendu (-E
) et 6 "scripts" appliqués (-e
) et les sauts de ligne se sont échappés avec \
pour plus de lisibilité. Les scripts 1 et 2 utilisent 1i\
à "à la ligne 1, insérer". Les scripts 5 et 6 utilisent $a\
à "à la ligne <dernière>, ajoutez". J'ai aligné verticalement les sorties de texte pour que le code représente ce qui est attendu dans le résultat. Les scripts 3 et 4 font des substitutions (ce dernier ne s'appliquant qu'à la "ligne <dernière>"). Le résultat convertit la sortie de la commande en JSON valide.
{
"lines": [
" October 2019 ",
"Su Mo Tu We Th Fr Sa ",
" 1 2 3 4 5 ",
" 6 7 8 9 10 11 12 ",
"13 14 15 16 17 18 19 ",
"20 21 22 23 24 25 26 ",
"27 28 29 30 31 ",
" "
]
}