Utilisez sed avec ignore case tout en ajoutant du texte avant un pattern

sed -i '/first/i This line to be added' 

Dans ce cas, comment ignorer la casse en recherchant pattern = first

Vous pouvez utiliser les éléments suivants:

 sed 's/[Ff][Ii][Rr][Ss][Tt]/last/g' file 

Sinon, vous avez les indicateurs /I et n /i :

 sed 's/first/last/Ig' file 

De man sed :

je

je

Le modificateur I pour la correspondance d’expressions régulières est une extension GNU qui fait que sed match regexp est insensible à la casse.

Tester

 $ cat file first FiRst FIRST fir3st $ sed 's/[Ff][Ii][Rr][Ss][Tt]/last/g' file last last last fir3st $ sed 's/first/last/Ig' file last last last fir3st 

GNU sed

 sed '/first/Ii This line to be added' file 

Si vous voulez enregistrer une frappe, essayez awk. Je ne pense pas que sed a cette option

  awk -v IGNORECASE="1" '/first/{your logic}' file 

Tu peux essayer

 sed 's/first/somethingelse/gI' 

Pour les versions de awk qui ne comprennent pas la variable spéciale IGNORECASE , vous pouvez utiliser quelque chose comme ceci:

 awk 'toupper($0) ~ /PATTERN/ { print "ssortingng to insert" } 1' file 

Convertissez chaque ligne en majuscule avant de tester si elle correspond au modèle et, le cas échéant, imprimez la chaîne. 1 est la condition vraie la plus courte, donc awk fait la chose par défaut: { print } .

Pour utiliser une variable, vous pouvez utiliser ceci:

 awk -v var="$foo" 'BEGIN { pattern = toupper(foo) } toupper($0) ~ pattern { print "ssortingng to insert" } 1' file 

Cela passe la variable shell $foo et la transforme en majuscule avant le traitement du fichier.

Un peu plus court avec bash serait d’utiliser -v pattern="${foo^^}" et de sauter le bloc BEGIN .