Возможно, вы могли бы добавить фразу начального соответствия для запуска программы, чтобы определить, включать правило или нет. Хотя я не совсем понимаю, как вы хотите определить, является ли это "временем загрузки" (правило отключено) или нет (правило включено). В остальном, фактическое добавление строки udev будет выглядеть следующим образом:
PROGRAM="/usr/local/bin/notboottime",KERNEL....
Проверьте man udev
для подробностей об этом ключе соответствия.
С bash работа с подстроками:
s1="abcd"
s2="xwyz"
s1=${s1:0:2}${s2:3}${s1:3}
${s1:0:2}
-1-й фрагмент, содержащийab
(до 3-го символаc
)
${s2:3}
-4-й символ строки s2
для вставки
${s1:3}
-последний (4-й )символ строки s1
Окончательное s1
значение:
echo $s1
abzd
Или с помощью инструмента GNU awk :
gawk -v s2=$s2 -v FPAT='[a-z]' '{$3=substr(s2,4)}1' OFS="" <<< $s1
abzd
<<< $s1
-первая строка s1
считается входным содержимым
-v s2=$s2
-передача второй строки s2
в качестве переменной в скрипт awk
FPAT='[a-z]'
-шаблон регулярного выражения, определяющий значение поля([a-z]
-любой буквенный символ)
В качестве альтернативы вы также можете применить «пустой» разделитель полей FS=""
, рассматривая каждый символ как отдельное поле:
gawk -v s2=$s2 'BEGIN{ FS=OFS="" }{$3=substr(s2,4)}1' <<< $s1
abzd
Вот код awk (длинный и сложный, но у меня работает)
echo |awk -v a="$string1" -v b="$string2" '{split(a,a1,""); n=split(b,b1,"");a1[2]=b1[3];for (i=1;i<=n;i++) {printf a1[i]}}'