Trouver et remplacer des lignes commençant par un motif

J’ai un texte dans un fichier file.txt comme ça

xxxxxxxxxxxxxxx xxxxxxxxxxxxxxx abc // delimited by tab xxxxxxxxxxxxxxx xxxxxxxxxxxxxxx 

Je sais en utilisant sed je peux trouver et remplacer le texte dans un fichier. Si une ligne commence par ab (séparé par un onglet), je dois le remplacer par de f. Donc, le fichier ci-dessus sera

 xxxxxxxxxxxxxxx xxxxxxxxxxxxxxx def // delimited by tab xxxxxxxxxxxxxxx xxxxxxxxxxxxxxx 

Je peux le faire pour trouver et remplacer, je veux seulement les cas où la ligne commence par ab et remplace la ligne entière.

 sed -i 's/a/\t/\b/\t\/c/REPLACED TEXT/g' file.TXT 

Utilisez un symbole ^ pour représenter le début d’une ligne:

sed -i 's/^a\tb.*$/REPLACED TEXT/g' file.TXT

Exmplanation:

  • ^ signifie début de ligne / entrée
  • \t signifie symbole d’onglet
  • . signifie n’importe quel caractère
  • * signifie zéro ou plus de l’expression précédente
  • $ signifie fin de ligne / entrée

Ce qui suit remplacera la ligne entière si elle commence par abc . Le .*$ Fait que le match inclut la ligne entière pour le remplacement. Votre exemple de regex incluait c mais la prose ne mentionnait a et b , donc il n’était pas très clair si c était requirejs. Sinon, supprimez \tc du regex.

 s/^a\tb\tc.*$/REPLACED TEXT/g 

Avec awk

 awk '/^a\tb/{$0="REPLACED TEXT"} 1' foo.txt 

Cela pourrait fonctionner pour vous (GNU sed):

 sed -i '/^a\tb/c\replacement text' file