Заменить все элементы, не относящиеся к символам и цифрам, на ' '

если perl в порядке, можно использовать режим абзаца (параметр -00 ) и использовать многострочный соответствие регулярному выражению

$ cat ip.txt 
eggs
bacon
cereal

eggs
bacon
cheese
cereal

$ perl -00 -ne 'print if !/^eggs.*cheese.*cereal$/ms' ip.txt 
eggs
bacon
cereal
2
12.05.2019, 18:02
1 ответ

Чтобы сопоставить все не -буквенно-цифровые символы, используйте [^[:alnum:]]. Это похоже на[^abc]:начальный знак вставки заставляет выражение в квадратных скобках соответствовать всем символам, кроме перечисленных.

Чтобы сопоставить буквальное тире, нужно убедиться, что оно не интерпретируется как создание списка совпадающих символов. Сделайте его первым символом выражения в квадратных скобках:[-,.;/()_].

Обратите внимание, что sed не принимает /в качестве разделителя для s///, если оно находится в выражении в квадратных скобках, поэтому нет необходимости ставить перед ним обратную косую черту. (Обратная косая черта будет соответствовать самой себе. ). echo 'a\b/c' | sed 's/[/\]/./g'печатает a.b.c.

См., например, справочную страницуregex(7)для описания синтаксиса регулярных выражений. (Обратите внимание, что в основном обсуждаются расширенные регулярные выражения (ERE ), используемые sed -Eво многих/большинстве sed.)

5
27.01.2020, 21:55

Теги

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