Добавление каталога в PATH, различные способы и различия

Кажется, вы можете использовать sed для выполнения этой задачи, даже если он не знает о классе символов [[:ascii:]]. Вместо этого мы можем указать все символы ASCII с рядом escape-последовательностей [\d0-\d127], если мы используем локали C или POSIX.

Вот команда, которая должна быть надежной:

LC_ALL=C sed -r ':a;N;s|^([\d0-\d127]+)\n([\d0-\d127]+)$|\1 / \2|;ta' file

Примечания

LC_ALL=C Используйте C настройки локали только для этой команды (иначе вы получите сообщение об ошибке) -r Используйте расширенное регулярное выражение, чтобы сделать команду более читаемой (нам нужно меньше обратных косых черт) (GNU sed также распознает -E с тем же значением). :a Здесь начинается цикл меток ; Разделяет команды, как в оболочке N. Прочитайте следующую строку в пространстве шаблонов, поэтому мы можем заменить \n s|old|new| Заменить old на new - сопоставить две строки только с ASCII и захватить первую строку в \1 и вторую строку в \2. ^ - начало строки, \n - новая строка, а $ - конец строки, поэтому ^line 1\nline 2$ проверяет все line 1 и line 2. \1 / \2 Первая и вторая строки, разделенные  /  вместо новой строки. ta - Если последняя команда поиска и замены выполнена успешно, повторите цикл. Это позволяет нам обрабатывать все строки файла, обрабатывая все экземпляры, в которых имеется более двух строк ASCII.

Большое спасибо Eliah Kagan за то, что он показал мне, как использовать escape-последовательности для соответствия символам ASCII.

1
задан 13 April 2017 в 15:24

0 ответов

Другие вопросы по тегам:

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