Как можно Я заменяю определенный символ в одной строке конкретным символом из другой строки?

Возможно, вы могли бы добавить фразу начального соответствия для запуска программы, чтобы определить, включать правило или нет. Хотя я не совсем понимаю, как вы хотите определить, является ли это "временем загрузки" (правило отключено) или нет (правило включено). В остальном, фактическое добавление строки udev будет выглядеть следующим образом:

PROGRAM="/usr/local/bin/notboottime",KERNEL....

Проверьте man udev для подробностей об этом ключе соответствия.

4
20.07.2017, 21:17
2 ответа

С 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
11
27.01.2020, 20:46

Вот код 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]}}'
3
27.01.2020, 20:46

Теги

Похожие вопросы