У меня есть файл с разделителями разделов, для которого я хочу условно выделить определенные столбцы или определенные значения.Выделите значения, разделенные вкладками, на основе нескольких правил
Пример исходного файла:
wn name Building Name 8 Desc char -> bl
wo bl_id!* Building Code 8 char
Я хочу:
- положить в желтый содержимое 2-го столбца, когда имя суффиксом «!»
- положить в голубой цвет содержание 2-го столбца и зеленым содержимым 7 колонки, когда есть такая 7-й столбец
- поставить немного «*» знак в красном, во 2-й колонке
и еще пару таких правил.
В настоящее время я сделать это таким образом:
cat file.tsv
| sed -r 's/^([^\t]*)\t([^\t]*)!/\1\t\x1b[33m\2!\x1b[0m/' \
| sed -r 's/^^([^\t]*)\t([^\t]*)\t(.*)\t-> ([^\t]+)/\1\t\x1b[36m\2\x1b[0m\t\3\t-> \x1b[32m\4\x1b[0m/' \
| sed -r 's/\*/\x1b[31;1m&\x1b[0m/'
Но это довольно сложно читать и обновлять.
Есть ли лучший способ? Я совершенно уверен, но какой?
Есть ли такие вещи, как GRC или Supercat? Хотя, я должен признать, что у меня есть довольно важное ограничение: я хотел бы, чтобы решение работало из коробки в Cygwin. Не хотите, чтобы скомпилировать инструменты там - по соображениям переносимости моего кода.
Можете ли вы рассказать о том, как улучшить код, чтобы получить такую «подсветку» функциональности?
Обратите внимание, что это немного страшнее, чтобы адаптироваться в том смысле, что sed никогда не подавлял строки и не дублировал их. С awk-скриптом такие вещи могут случиться, если мы недостаточно осторожны ... – user3341592