fc-list FontName file
где FontName
— точное имя шрифта, найденное с
fc-list | grep -i approximate-or-partial-font-name
awk 'BEGIN {RS=ORS="\n\n"};
/^info {/ { gsub("}","work day4\nwork day5\nwork day8\n}") };
/^work {/ { gsub("}","Absent No\n}") };
1' info.txt
Это говорит awk читать входной файл по абзацу за раз (т. е. записи разделяются двумя символами новой строки, а не только одной, путем установки разделителя входных записей RS
на\n\n
). Он также устанавливает разделитель выходных записей таким же, как RS
, так что выходные данные также содержат пустую строку между записями.
Затем он использует функцию gsub()
для добавления дополнительной строки (s )непосредственно перед }
в конце каждого соответствующего абзаца (тех, которые начинаются с «info {» или «work { ). На самом деле, заменяет на }
в конце этих записей дополнительными строками и на }
-, что фактически то же самое, что и вставка дополнительных строк.
Окончательный 1
является сокращением awk для print
и печатает каждую запись независимо от того, была ли она изменена или нет.
Сperl
:
perl -0777 -pi -e '
s{^info\s*\{.*?\K(?=\})}{join "", map {"work day$_\n"} 4,5,8}mse;
s{^work\s*\{.*?\K(?=\})}{Absent No\n}ms' /home/count/1/details/info.txt
Также с awk
в режиме абзаца вы можете попробовать этот код:
awk -v s1="Absent No\n" -v s2="work day4\nwork day5\nwork day8\n" -v OFS="\n" -v RS= -v ORS='\n\n' '$1 == "work" {sub(/}/, s1"&")} $1 == "info" {sub(/}/, s2"&")} 1' file
title1 {
key1 value1
key2 value2
key3 value3
}
info {
name1 text
post1 anything
salary 1
work day1
work day2
work day3
work day4
work day5
work day8
}
work {
department sell
store ground
remarks
Absent No
}
contact {
required No
}
Использование GNU awk для многосимвольных -char RS и RT и выполнение сопоставления и замены буквенных строк:
$ awk -v RS='}\n+' -v ORS= '
$1 == "info" { $0 = $0 "work day4\nwork day5\nwork day8\n" }
$1 == "work" { $0 = $0 "Absent No\n" }
{ print $0 RT }
' file
title1 {
key1 value1
key2 value2
key3 value3
}
info {
name1 text
post1 anything
salary 1
work day1
work day2
work day3
work day4
work day5
work day8
}
work {
department sell
store ground
remarks
Absent No
}
contact {
required No
}
sed -i -e '
/^info {/,/}/ s/}/work day4\nwork day5\nwork day8\n&/
/^work {/,/}/ s/}/Absent No\n&/
' /home/count/1/details/info.txt
perl -i -lpe '
/^info \{/.../}/ and /}/ && do{
print for map { "work day$_" } 4,5,8};
/^work \{/.../}/ and /}/ &&
print "Absent No";
' /home/count/1/details/info.txt