Замена всей строки на $newLineCont
, если первое поле, разделенное пробелом -, равно$cont
:
awk -v c="$cont" -v nc="$newLineCont" '$1 == c { $0 = nc } 1' <infile >outfile
Будет прочитано из infile
и создан новый файл с именем outfile
. Если первое поле строки равно $cont
, вся строка будет заменена на $newLinecont
.
Замыкающая строка 1
— это краткий способ записи { print }
, который приводит к выводу всех строк.
Учет комментария Stéphane Chazelas ниже во внимание (в случаях, когда одна или обе ваши переменные содержат обратную косую черту):
env c="$cont" nc="$newLineCont" awk '$1 == ENVIRON["c"] { $0 = ENVIRON["nc"] } 1' <infile >outfile
Использованиеsed
:
sed "s/^$cont[^0-9].*/$newLineCont/" <infile >outfile
С sed
мы должны быть более осторожны, чтобы сопоставлять правильные вещи без регулярного выражения. Если $cont
равно 12
, мы , а не хотим сопоставить строки, начинающиеся с 123
. Вот почему я явно сопоставляю не -цифру после $cont
с[^0-9]
(Я предполагаю, что $cont
является числом ).
Как и в случае с командой awk
, это чтение из infile
и запись в outfile
.
Если $cont
или $newLineCont
содержит косую черту, их нужно экранировать как \/
, а если $cont
содержит какой-либо другой символ, который является специальным в регулярных выражениях, их также необходимо правильно экранировать.