Самый надежный способ перечислить все базовые имена в каталоге, отсортированные по дате модификации?

Замена всей строки на $newLineCont, если первое поле, разделенное пробелом -, равно$cont:

awk -v c="$cont" -v nc="$newLineCont" '$1 == c { $0 = nc } 1' outfile

Будет прочитано из infileи создан новый файл с именем outfile. Если первое поле строки равно $cont, вся строка будет заменена на $newLinecont.

Замыкающая строка 1— это краткий способ записи { print }, который приводит к выводу всех строк.


Учет комментария Stéphane Chazelas ниже во внимание (в случаях, когда одна или обе ваши переменные содержат обратную косую черту):

env c="$cont" nc="$newLineCont" awk '$1 == ENVIRON["c"] { $0 = ENVIRON["nc"] } 1' outfile

Использованиеsed:

sed "s/^$cont[^0-9].*/$newLineCont/" outfile

С sedмы должны быть более осторожны, чтобы сопоставлять правильные вещи без регулярного выражения. Если $contравно 12, мы , а не хотим сопоставить строки, начинающиеся с 123. Вот почему я явно сопоставляю не -цифру после $contс[^0-9](Я предполагаю, что $contявляется числом ).

Как и в случае с командой awk, это чтение из infileи запись в outfile.

Если $contили $newLineContсодержит косую черту, их нужно экранировать как \/, а если $contсодержит какой-либо другой символ, который является специальным в регулярных выражениях, их также необходимо правильно экранировать.

6
25.07.2020, 11:23
0 ответов

Теги

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