Некоторые цвета можно настраивать. Похоже, вы говорите о коде, реализованном здесь:
attrs[3] = tag_key_selected_attr;
attrs[2] = tag_key_attr;
attrs[1] = tag_selected_attr;
attrs[0] = tag_attr;
и ("ключ" - интересующая деталь )несколько примеров настройки цветов в каталоге samples
, например, этот раздел:
# Tag key color
tag_key_color = button_key_inactive_color
# Selected tag key color
tag_key_selected_color = (RED,BLUE,ON)
То есть, если бы вы сделали цвета различных тегов -одинаковыми, выделение исчезло бы.
Это задача, в которой мы можем использоватьtac
для разбора файла в обратном порядке:
tac file | awk -F';' 'NF > 1 {p = substr($0,index($0,FS))} {print $1 p}' | tac
Итак, мы не сохраняем никаких строк, а печатаем после прочтения каждой из них.
Когда NF > 1
мы сохраняем подстроку от первого FS
до конца строки для использования в будущем.
Использованиеsed
:
sed -E '
/;/!{ :a N;/;/!{ s/\n/-/;ta; }; };
/;/ { s/\n/-/; };
:c s/([^-]*)-([^;]*)(;.*)$/\1\3\n\2\3/; tc' infile
Использование GNU sed
с включенным расширенным режимом регулярных выражений-E
$ sed -Ee '/\n/ba
H;/;/!d;z;x;D;:a
s/\n(.*\n)?[^;]+(;.*)/\2&/
P;/\n.*\n/D;s/.*\n//
' file
$ perl -lne '$, = ";";
push(@A,$_),next if !/;/;
my $a = s/.*?;//r;
print $_, $a for splice @A;
print;
' file
Другоеawk
-решение на основе двойного -прохода (требует GNU awk
или nawk
для функции gensub()
):
awk -F';' 'FNR==NR{if (NF>1) data[++i]=gensub(/^[^;]+/,"","1");next}
{if (NF==1) $0=$0 data[j+1]; else j++;} 1' input.csv input.csv
Это приведет к двойному сканированию файла. В первый раз он создает массив «частей данных» из тех строк, которые содержат более одного поля. Во второй раз он заменяет часть данных там, где она отсутствует, и увеличивает счетчик массива каждый раз, когда встречается «полная» строка, так что следующая часть данных заменяет следующие строки.