Je dois ajouter un #
avant toute ligne contenant le motif "000", par exemple, considérez cet exemple de fichier:
This is a 000 line.
This is 000 yet ano000ther line.
This is still yet another line.
Si j'exécute la commande, elle devrait ajouter #
au début de tous les fichiers où "000" a été trouvé. Le résultat serait le suivant:
#This is a 000 line.
#This is 000 yet ano000ther line.
This is still yet another line.
Le mieux que je puisse faire est une boucle while, comme celle-ci, qui semble trop compliquée:
while read -r line
do
if [[ $line == *000* ]]
then
echo "#"$line >> output.txt
else
echo $line >> output.txt
fi
done < file.txt
Comment puis-je ajouter un #
au début d'une ligne où se trouve un motif?
Cela pourrait fonctionner pour vous (GNU sed):
sed 's/.*000/#&/' file
La commande sed suivante fonctionnera pour vous, ce qui ne nécessite aucun groupe de capture:
sed /000/s/^/#/
Explication:
/000/
correspond à une ligne avec 000
s
effectuer une substitution sur les lignes correspondantes ci-dessus#
) au début de la ligne (^
)la question était de savoir comment ajouter le signe livres à ces lignes dans un fichier afin de rendre la réponse de tim coopers excellente plus complète, je suggère ce qui suit:
sed /000/s/^/#/ > output.txt
ou vous pourriez envisager d'utiliser la capacité de sed pour éditer sur place le fichier en question et également faire une copie de sauvegarde comme:
sed -i.bak /000/s/^/#/ file.txt
l'option "-i" éditera et enregistrera le fichier en ligne/en place l'option "-i.bak" sauvegardera également le fichier d'origine dans file.txt.bak au cas où vous bousilleriez quelque chose.
vous pouvez remplacer ".bak" par n'importe quel suffixe à votre convenance. par exemple: "-i.orignal" créera le fichier d'origine comme: "file.txt.orignal"
ou utilisez ed
:
echo -e "g/000/ s/^/#/\nw\nq" | ed -s FILENAME
ou ouvrir un fichier dans ed:
ed FILENAME
et écrivez cette commande
g/000/ s/^/#/
w
q
Essayez ceci GNU sed,
$ sed -r '/000/ s/^(.*)$/#\1/g' file
#This is a 000 line.
#This is 000 yet ano000ther line.
This is still yet another line.
Explication:
/000/
la substitution sed ne fonctionne que sur la ligne qui contient 000
. Une fois qu'il a trouvé la ligne correspondante, il ajoute #
symbole devant.Et à travers awk,
$ awk '/000/{gsub (/^/,"#")}1' file
#This is a 000 line.
#This is 000 yet ano000ther line.
This is still yet another line
gsub
la fonction est utilisée pour ajouter #
devant les lignes contenant 000
.