Voici ce que je fais (exemple simplifié):
gsed -i -E 's/^(?!foo)(.*)$/bar\1/' file.txt
J'essaie de mettre bar
devant chaque ligne qui ne commence pas par foo
. Voici l'erreur:
gsed: -e expression #1, char 22: Invalid preceding regular expression
Qu'est-ce qui ne va pas?
Pour autant que je sache, sed
n'a ni regard en avant ni regard en arrière. Basculez vers un langage plus puissant avec une syntaxe similaire, comme Perl
.
sed -i '/^foo/! s/^/bar/' file.txt
-i
changer le fichier en place/^foo/!
n'effectue l'action suivante que sur les lignes non !
commençant par foo^foo
s/^/bar/
changer le début de la ligne en barVous utilisez la syntaxe d'expression régulière compatible Perl (PCRE) qui n'est pas prise en charge par GNU sed. Vous devez réécrire votre expression régulière selon SED Regular-Expressions ou utiliser Perl à la place.