Использование sed для удаления строки без учета регистра - PullRequest
31 голосов
/ 28 января 2010

Как сопоставить регулярное выражение без учета регистра и удалить его одновременно

Я прочитал, что для получения нечувствительных к регистру совпадений используйте флаг "i"

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

и для удаления используйте d

sed -e "/pattern/d" filepath

Я также читал, что могу комбинировать несколько флагов, например, 2iw

Я хотел бы знать, может ли sed комбинировать и i, и d Я попробовал следующее, но это не сработало

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

Ответы [ 2 ]

48 голосов
/ 28 января 2010

Для регистронезависимого использования /I вместо /i.

sed -e "/pattern/Id" filepath
1 голос
/ 29 января 2010

Вы также можете использовать (г) awk.

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

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

ИЛИ только с оболочкой (bash)

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