Как заменить на sed целую строку?


132

Допустим, у меня есть файл со строками

ааа = БББ

Теперь я хотел бы заменить их на:

ааа = ххх

Я могу сделать это следующим образом:

sed "s / aaa = bbb / aaa = xxx / g"

Теперь у меня есть файл из нескольких строк:

ааа = БББ
ааа = ссс
ааа = ддд
aaa = [что-то еще]

Как я могу заменить все эти строки aaa=[something]с aaa=xxxпомощью sed ?


2
Это [something else]буквальный текст или это просто заполнитель? Каков возможный формат вещи после знака равенства?
ean5533

это скорее вопрос регулярного выражения, а не вопрос sed.
saferJo

Ответы:


217

Попробуй это:

sed "s/aaa=.*/aaa=xxx/g"

4
В силу привычки, в этом случае его можно игнорировать - он используется как глобальная замена строки для замены каждого совпадения, а не только первого. В этом случае, хотя только первый будет сопоставлен из-за .*.
Джон Дойл

1
Майкл Дж. Барбер, gзамените все экземпляры regexp на замену
A-IV

116

Для этого вы также можете использовать строку изменения sed:

sed -i "/aaa=/c\aaa=xxx" your_file_here

При этом будут найдены все строки, прошедшие aaa=проверку, что означает, что строка содержит буквы aaa=. Затем он заменяет всю строку на aaa = xxx. Вы можете добавить ^в начале теста, чтобы убедиться, что вы получаете только те строки, которые начинаются с, aaa=но это зависит от вас.


12
OS X sedтребует, cчтобы за ними следовала обратная косая черта и новая строка, и она не добавляет новую строку к вставленному тексту, но вы можете использовать, например $'/aaa=/c\\\naaa=xxx\n'.
Пт,

Вот и пример в документации sed функции изменения / замены, которая @Mr. Т говорит о.
gene_wood

Это ближе всего к тому, о чем просили ... (Но версия Лри необходима для переносимости)
Герт ван ден Берг

42

Как это:

sed 's/aaa=.*/aaa=xxx/'

Если вы хотите гарантировать, что aaa=находится в начале строки, сделайте это:

sed 's/^aaa=.*/aaa=xxx/'

1
Что, если я хочу заменить на aaa = 'xxxx'. Я пытался сбежать, sed 's/aaa=.*/aaa=\'xxx\'/'но это открывает >подсказку в новой строке ...
Nagev



0

Это может сработать для вас:

cat <<! | sed '/aaa=\(bbb\|ccc\|ddd\)/!s/\(aaa=\).*/\1xxx/'
> aaa=bbb
> aaa=ccc
> aaa=ddd
> aaa=[something else]
!
aaa=bbb
aaa=ccc
aaa=ddd
aaa=xxx

Я не думаю , что явный чек bbb, cccи dddсовсем то , что ОП имел в виду.
раскрутка
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.