Comment ajouter un # devant chaque ligne contenant un filtre en BASH?
J'ai besoin d'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 je lance la commande, il faut ajouter #
à l'avant de tous les fichiers où "000" a été trouvé. Le résultat serait celui-ci:
#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, à l'instar de ce qui semble trop compliqué:
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 #
à l'avant de la ligne où un modèle est trouvé?
Vous pouvez utiliser la commande sed pour accomplir cela, mais avez-vous envisager de le faire avec un éditeur de texte? Dans vim par exemple cette tâche peut être facilement automatisé par les macros.
OriginalL'auteur Village | 2014-06-15
Vous devez vous connecter pour publier un commentaire.
Cela pourrait fonctionner pour vous (GNU sed):
OriginalL'auteur potong
La commande suivante de sed va travailler pour vous, qui ne nécessite pas de groupes de capture:
Explication:
/000/
correspond à une ligne avec000
s
effectuer une substitution sur les lignes appariés au-dessus de#
) au début de la ligne (^
)sed
script sans ceux.Depuis il n'y a pas de caractères spéciaux que bash va essayer de l'interpréter (le
#
ne cause pas de problèmes, car il fait partie d'un plus grand mot), les guillemets ne sont pas nécessaires.Merci pour l'aide, j'ai besoin de quelque chose pour MYSQL fichier de config et cela a fonctionné pour moi
sed -i '/bind-address/s/^/#/' /etc/mysql/mysql.conf.d/mysqld.cnf
OriginalL'auteur Tim Cooper
ou de l'utilisation
ed
:ou ouvrez le fichier à ed :
et écrire cette commande
ed
- lorsqu'il n'existe pas spécialement non-interactive-outils pour le faire, commesed
. Aussi, par exemple,sed
était installé par défaut sur mon système Debian, maised
ne l'est pas. Et lesed
version est beaucoup moins ballonnement dans la chaîne de commande.OriginalL'auteur بارپابابا
la question était de savoir comment ajouter le poundsign à ces lignes dans un fichier de façon à rendre tim coopers excellente réponse plus complète, je vous suggère les suivantes:
ou vous pourriez envisager d'utiliser sed capacité de lieu de modifier le fichier en question, et aussi faire une copie de sauvegarde comme:
le "-i" option d'éditer et d'enregistrer le fichier inline/en-lieu
"-je.bak" option permettra également de sauvegarder le fichier d'origine dans le fichier.txt.bak dans le cas où tu vis quelque chose.
vous pouvez remplacer ".bak" avec un suffixe à votre goût.
par exemple: "-je.orignal" va créer le fichier d'origine que: "le fichier.txt.orignal"
OriginalL'auteur geegee
Essayer cette GNU sed commande,
Explication:
/000/
sed substitution ne fonctionne que sur la ligne qui contans000
. Une fois qu'il trouve la ligne correspondante, il ajoute#
symbole en face d'elle.Et par awk,
gsub
fonction est utilisée pour ajouter des#
en face des lignes qui contient000
.Je n'étais pas la downvoter, mais il n'y a aucune raison pour capturer
(.*)
juste pour le remplacer par lui-même\1
--s/^/#/
est beaucoup plus simpleD'accord. Mais c'est aussi une solution de travail
OriginalL'auteur Avinash Raj