sed -i '/first/i This line to be added'
В этом случае, как игнорировать регистр при поиске шаблона = first
sed -i '/first/i This line to be added'
В этом случае, как игнорировать регистр при поиске шаблона = first
Вы можете использовать следующее:
sed 's/[Ff][Ii][Rr][Ss][Tt]/last/g' file
В противном случае у вас есть флаги /I
и n/i
:
sed 's/first/last/Ig' file
От человека sed:
Я
я
Модификатор I для сопоставления с регулярным выражением — это расширение GNU, которое позволяет sed сопоставлять регулярное выражение без учета регистра.
$ 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
/i /I
для gnu sed и только для s/../../ (substitution operation)
, если я правильно помню. не работает для /.../p
например
- person Kent; 04.06.2013
/.../Ip
тоже работало. ... следует проверить, а затем оставить комментарий ... но опять же, для gnu sed. +1 ваш ответ.
- person Kent; 04.06.2013
/.../I p
; почти уверен, что вам нужен пробел после модификаторов. Это работает для всех регулярных выражений, а не только для замены.
- person Zenexer; 29.01.2015
sed '/first/Ii This line to be added' file
Можешь попробовать
sed 's/first/somethingelse/gI'
если вы хотите сэкономить на наборе текста, попробуйте awk. Я не думаю, что у sed есть такая возможность
awk -v IGNORECASE="1" '/first/{your logic}' file
Для версий awk, которые не понимают специальную переменную IGNORECASE
, вы можете использовать что-то вроде этого:
awk 'toupper($0) ~ /PATTERN/ { print "string to insert" } 1' file
Преобразуйте каждую строку в верхний регистр, прежде чем проверять, соответствует ли она шаблону, и если да, напечатайте строку. 1
— это самое короткое условие true, поэтому 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
.
Используйте следующее, \b для границы слова
sed 's/\bfirst\b/This line to be added/Ig' file