web-dev-qa-db-fra.com

Comment ajouter un # avant toute ligne contenant un motif correspondant dans BASH?

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?

25
Village

Cela pourrait fonctionner pour vous (GNU sed):

sed 's/.*000/#&/' file
22
potong

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
  • La substitution insérera un caractère dièse (#) au début de la ligne (^)
57
Tim Cooper

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"

3
geegee

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
1
بارپابابا

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.
0
Avinash Raj