Что-то вроде следующего скрипта, использующего gawk
#!/bin/bash
gawk -F, 'tbl[$1]!=""{$2=tbl[$1];OFS=",";print;next}{tbl[$1]=$2;}' $1 $2
Сначала вы передаете два файла с файлом токена. Это предполагает, что в первом файле нет повторов, и если во втором файле есть какие-либо лишние строки, где первое поле не имеет совпадения в первом файле, то эти строки не выводятся.
Программа gawk
создает ассоциативный массив tbl
, индексированный первым полем, из первого файла, затем использует его для замены второго поля для второго файла, затем печатает строки с заменами и с использованием "," в качестве разделителя полей. Подробнее см. man gawk
.
Обратные кавычки на странице руководства bash явно указаны в Источник troff, а не результат какого-либо макроса, поэтому его сложно изменить. Однако специальные одиночные обратные кавычки цитируются \ `
, поэтому вы можете применить свой sed к исходному troff вместо этого, используя это различие.
Вместо этого вы можете добавить команду troff для преобразования обратной кавычки в какой-либо другой символ. Команда .tr AXBY
переводит все A в X и B в Y. Таким образом,
(echo '.tr `"'\''"'; zcat $(man -w bash)) | man /dev/stdin
переводит обратные кавычки и одинарные кавычки в двойные кавычки. Это оставляет вам только требуемые специальные одиночные обратные кавычки в выводе, хотя у вас также есть артефакты, такие как возврат конвейера
.
В целом, я думаю, что ваш «плохой обходной путь» вполне адекватен.
Это может быть неприятный вариант, но вы можете использовать w3m
в качестве браузера для вывода HTML man
:
BROWSER=w3m man -H bash
Он отображает «…» '
с использованием кавычек Unicode (как и Google Chrome, но по какой-то причине lynx
этого не делает).
В репозитории man-страниц FreeBSD говорится, что man
CentOS 7 поддерживает -H
.
Согласие с @meuh в том, что цитаты встроены в источники troff (справочной страницы), вопрос о том, трудно ли изменить , остается спорным. Это во многом зависит от разработчика данной документации. bash использует это соглашение для работы с набором инструментов , например, makeinfo
.
Например, на странице руководства xterm используются макросы для (возможно) лучшего внешнего вида:
.\" Escape single quotes in literal strings from groff's Unicode transform.
.ie \n(.g .ds AQ \(aq
.el .ds AQ '
.ie \n(.g .ds `` \(lq
.el .ds `` ``
.ie \n(.g .ds '' \(rq
.el .ds '' ''
Это было из отчета об ошибке (исправлено в 2009 ):
работать над отображением groff в ASCII цитаты с использованием макросов (запрошены Рубеном Томасом на основании совета Колина Ватсона, исправляет Debian # 378700 ).
и используется, например,
.PP
Although both windows may be displayed at the same time, one of them is
considered the \*(``active\*('' window for receiving keyboard input and terminal
output.
и производит это (вырезать / вставить из xterm, чтобы сохранить альтернативные кавычки):
Хотя оба окна могут отображаться одновременно, одно из них считается «активным» окном для приема ввода с клавиатуры и вывода терминала . Это окно, в котором находится текстовый курсор. Активное окно можно выбрать с помощью управляющих последовательностей, меню параметров VT в окне VTxxx и меню параметров Tek в окне 4014 {{1 }} окно.
На скриншоте это лучше видно:
Результат в PDF использует разные кавычки из-за условия в макросе:
Таким образом, возможным улучшением было бы изменение препроцессора для добавления определений макросов и замены именованных символов groff а не буквальные одинарные и двойные кавычки. Поскольку по умолчанию ни один из них не создает ASCII, в результате будет меньше синтаксического беспорядка.
Это напоминает мне, что замена этих «xxx» курсивом улучшит ситуацию (возможно, в другой раз).