Используйте sed с игнорированием при добавлении текста перед некоторым шаблоном

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

В этом случае, как игнорировать регистр при поиске pattern = first

Ответ 1

Вы можете использовать следующее:

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

В противном случае у вас есть флаги /I и n /I:

sed 's/first/last/Ig' file

От человека sed:

I

я

Модификатор я для соответствия регулярному выражению является расширением GNU, которое делает sed match regexp нечувствительным к регистру.

Test

$ 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

Ответ 2

GNU sed

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

Ответ 3

Вы можете попробовать

sed 's/first/somethingelse/gI'

Ответ 4

если вы хотите сохранить некоторую типизацию, попробуйте awk. Я не думаю, что у sed есть этот вариант

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

Ответ 5

Для версий awk, которые не понимают специальную переменную IGNORECASE, вы можете использовать что-то вроде этого:

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

Преобразуйте каждую строку в верхний регистр, прежде чем тестировать, соответствует ли она шаблону, и если это так, напечатайте строку. 1 - кратчайшее истинное условие, поэтому awk делает по умолчанию: { print }.

Чтобы использовать переменную, вы можете пойти с этим:

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

Это передает переменную оболочки $foo и преобразует ее в верхний регистр перед обработкой файла.

Немного короче bash будет использовать -v pattern="${foo^^}" и пропустить блок BEGIN.

Ответ 6

Используйте следующее, \b для границы слова

sed 's/\bfirst\b/This line to be added/Ig' file