Le fichier est :
#Welcome to the file
#this is a file and it ends on "exit 0"
#Here are unknown number of lines
exit 0
Il faut que ces lignes se suivent :
echo deadline > /sys/block/sda/queue/scheduler
echo 1 > /sys/block/sda/queue/iosched/fifo_batch
Donc ça ressemble à ça :
#Welcome to the file
#this is a file and it ends on "exit 0"
#Here are unknown number of lines
echo deadline > /sys/block/sda/queue/scheduler
echo 1 > /sys/block/sda/queue/iosched/fifo_batch
exit 0
PROBLÈMES- commande dans commande dans commande dans commande avec beaucoup de lignes \n
Pour l'instant, j'ai commandé sed -i 's/exit 0/echo deadline > /sys/block/sda/queue/scheduler\necho 1 > /sys/block/sda/queue/iosched/fifo_batch\nexit 0/gp' /usr/file
mais il y a quelque chose qui cloche - ça ne marche pas.
Mise à jour 1
"SLASHES" /
a \/
: J'ai trouvé la solution pour les slashs à utiliser \/
et les antislashes \\
.
Donc maintenant ma commande fonctionne sed -i 's/exit 0/echo deadline > \/sys\/block\/sda\/queue\/scheduler\necho 1 > \/sys\/block\/sda\/queue\/iosched\/fifo_batch\nexit 0/' /usr/file
Mais il doit être modifié parce que maintenant il trouve toutes les expressions mais comment juste qu'il trouve une ligne n'ayant rien d'autre dedans ? Donc il ne remplace pas ce qui est dans exit 0
dans le commentaire des fichiers d'exemple.
Mise à jour 2
Au moins une ligne commençant par ^
: Trouvé pour faire la solution pour ce fichier sed 's/^exit 0/\necho deadline > \/sys\/block\/sda\/queue\/scheduler\necho 1 > \/sys\/block\/sda\/queue\/iosched\/fifo_batch\nexit 0/' /usr/file
mais dans le cas où le fichier texte a des lignes :
exit 0
exit 0 means exiting
Alors on ne peut pas utiliser ^
pour trouver la ligne commençant par l'expression.
La meilleure solution serait donc celle que je ne trouve pas : comment trouver la ligne exacte contenant juste une expression ou trouver la ligne d'expression et pas toutes les expressions ?
Mise à jour 3
Ligne exacte ^
& $
: S'éteindre ^
les limites ne doivent pas être sur le côté gauche et $
rien ne doit être sur le côté droit donc maintenant la solution de travail pour 1. la solution est sed -i 's/^exit 0$/\necho deadline > \/sys\/block\/sda\/queue\/scheduler\necho 1 > \/sys\/block\/sda\/queue\/iosched\/fifo_batch\nexit 0/' /usr/file
Je veux apprendre au moins 3 façons d'utiliser des commandes en 1 ligne. Comment faire :
- remplacer la ligne trouvée par 3 lignes avec le symbole contenant la commande comme mentionné
- trouvé la ligne complète et pas seulement l'expression et ajouté 2 lignes avant trouvé
- ajouter 2 lignes 1 ligne avant la fin
0 votes
Je ne sais pas vraiment ce que vous demandez. Pouvez-vous nous montrer un exemple de ce à quoi pourraient ressembler un fichier initial et un fichier final ?
0 votes
Veuillez poser plusieurs questions indépendamment, en tant que questions distinctes.
0 votes
Veuillez formuler votre question précisément . La signification de "remplacer la ligne trouvée par 3 lignes avec des symboles" n'est pas claire, car on s'attend à ce que "remplacer" n'ait qu'un seul "avec" correspondant après lui, comme "remplacer A par B".
0 votes
@Kangarooo - pouvez-vous confirmer si les réponses ci-dessous résolvent votre problème.