sed -i '/first/i This line to be added'
Dans ce cas, comment ignorer la casse lors de la recherche de motif = premier
Vous pouvez utiliser les éléments suivants:
sed 's/[Ff][Ii][Rr][Ss][Tt]/last/g' file
Sinon, vous avez les drapeaux /I
et n/i
:
sed 's/first/last/Ig' file
De l'homme sed :
I
i
Le modificateur I pour la correspondance d'expression régulière est une extension GNU qui permet à Sed d'apparier l'expression rationnelle d'une manière qui ne respecte pas la casse.
$ 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
sed '/first/Ii This line to be added' file
si vous voulez enregistrer un peu de 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 "string to insert" } 1' file
Convertissez chaque ligne en majuscule avant de vérifier si elle correspond au modèle et, le cas échéant, imprimez la chaîne. 1
est le plus court true condition, donc awk utilise le comportement par défaut: { print }
.
Pour utiliser une variable, vous pouvez aller avec ceci:
awk -v var="$foo" 'BEGIN { pattern = toupper(foo) } toupper($0) ~ pattern { print "string to insert" } 1' file
Cela transmet 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
.