AWK для замены строки, начинающейся с в большом файле [закрыто]

0
02.08.2018, 11:46
1 ответ

Замена всей строки на $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содержит какой-либо другой символ, который является специальным в регулярных выражениях, их также необходимо правильно экранировать.

1
28.01.2020, 02:42

Теги

Похожие вопросы