Как заменить на 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
2

Если вы хотите использовать, awkэто тоже сработает

awk -F= '{$2="xxx";print}' OFS="\=" filename
Джайпал Сингх
источник
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
Potong
источник
Я не думаю , что явный чек bbb, cccи dddсовсем то , что ОП имел в виду.
раскрутка