2010-01-28 8 views
28

Come posso abbinare un caso regex insensibile e eliminarlo al tempo stessoUsando sed per cancellare una case insensitive linea abbinato

ho letto che per ottenere caso le partite insensibili, utilizzare il flag "i"

sed -e "/pattern/replace/i" filepath 

ed eliminare l'uso d

sed -e "/pattern/d" filepath 

ho anche letto che avrei potuto combinare più bandiere come 2iw

Mi piacerebbe sapere se sed potrebbe combinare entrambi i e d ho provato quanto segue, ma non ha funzionato

sed -e "/pattern/replace/id" filepath > newfilepath 

risposta

41

Per l'uso case-insensitive/I al posto di/i.

sed -e "/pattern/Id" filepath 
+0

Ah! Funziona! Mi sento così stupido, lol Grazie! – eruina

+3

Attenzione: non è portatile. Vedi questo commento: http://stackoverflow.com/questions/4412945/case-insensitive-search-replace-with-sed#comment31685516_4412964 –

1

è possibile utilizzare (g) awk pure.

# print case insensitive 
awk 'BEGIN{IGNORECASE=1}/pattern/{print}' file 

# replace with case insensitive 
awk 'BEGIN{IGNORECASE=1}/pattern/{gsub(/pattern/,"replacement")}1' file 

o semplicemente con il guscio (bash)

#!/bin/bash 
shopt -s nocasematch 
while read -r line 
do 
    case "$line" in 
     *pattern*) echo $line; 
    esac 
done <"file" 
+0

L'unica cosa è ... mantiene le righe da eliminare. Quindi: 'awk 'BEGIN {IGNORECASE = 1}!/Pattern/{print}' file' –

Problemi correlati