Автор Тема: Скрипт sh, bash  (Прочитано 1370 раз)

Оффлайн tema

  • alt linux team
  • ***
  • Сообщений: 2 073
    • Email
Скрипт sh, bash
« : 10.01.2018 08:07:59 »
Помогите, пожалуйста, профессиональные кодеры в Shell  :-)
Хочу в файле в этом месте:
/usr/share/kf5/plasma/plasmoids/org.kde.plasma.taskmanager/contents/config
   <entry name="maxStripes" type="Int">
      <label>The maximum number of rows (in a horizontal-orientation containment, i.e. panel) or columns (in a vertical-orientation containment) to layout task buttons in.</label>
      <default>2</default>
      <min>1</min>
    </entry>
Поменять <default>2</default>чтобы было <default>1</default>Какой командой это можно сделать в командной строке?
ЗЫ
Ещё тут:
    <entry name="wheelEnabled" type="Bool">
      <label>Whether using the mouse wheel with the mouse pointer above the widget should switch between tasks.</label>
      <default>true</default>
    </entry>
Поменять на:
<default>false</default>
« Последнее редактирование: 10.01.2018 08:09:50 от tema »

Оффлайн oz

  • Начинающий
  • *
  • Сообщений: 32
Re: Скрипт sh, bash
« Ответ #1 : 10.01.2018 08:38:06 »
Например:
sed -i \
'/<entry [ ]*name=\"maxStripes\"/,/<\/entry>/s,<default>[ ]*2[ ]*</default>,<default>1</default>,;
/<entry [ ]*name=\"wheelEnabled\"/,/<\/entry>/s,<default>[ ]*true[ ]*</default>,<default>false</default>,;
' \
/usr/share/kf5/plasma/plasmoids/org.kde.plasma.taskmanager/contents/config

Оффлайн tema

  • alt linux team
  • ***
  • Сообщений: 2 073
    • Email
Re: Скрипт sh, bash
« Ответ #2 : 10.01.2018 09:42:39 »
Большое спасибо!  :-)
Попробую разобраться  :-)

Оффлайн tema

  • alt linux team
  • ***
  • Сообщений: 2 073
    • Email
Re: Скрипт sh, bash
« Ответ #3 : 10.01.2018 12:34:10 »
Оно работает, но я не смог разобраться в этой команде..  :'-(
Поясните, пожалуйста, хоть вкратце...
Запятая что может использоваться вместо / ?

Оффлайн ruslandh

  • Поспешай не торопясь !
  • Модератор глобальный
  • *****
  • Сообщений: 32 246
  • Учиться .... Телепатами не рождаются, ими ....
    • Email
Re: Скрипт sh, bash
« Ответ #4 : 10.01.2018 12:52:57 »
Уникальность программы sed в том, что она позволяет использовать любой разделитель

Оффлайн tema

  • alt linux team
  • ***
  • Сообщений: 2 073
    • Email
Re: Скрипт sh, bash
« Ответ #5 : 10.01.2018 12:59:23 »
Т.е. мы ищем то, что разделено слешами, а потом в найденом меняем и это команда разделённая запятыми?

Оффлайн oz

  • Начинающий
  • *
  • Сообщений: 32
Re: Скрипт sh, bash
« Ответ #6 : 10.01.2018 16:06:01 »
Поясните,...

/<entry [ ]*name=\"maxStripes\"/,/<\/entry>/

 /шаблон1/,/шаблон2/ -- диапазон строк в файле, в данном случае строки, начиная c <entry name ="maxStripes"...> и до первого закрывающего </entry>

s,<default>[ ]*2[ ]*</default>,<default>1</default>,

s,шаблон,подстановка, -- правило подстановки: если в строке есть последовательность "шаблон", она заменяется на "подстановка". Вместо разделителя ',' можно использовать '/', '%' и т.д.

/шаблон1/./шаблон2/ s,шаблон,подстановка, -- в диапазоне строк, начинающимся со строки, в которой есть "шаблон1" и до первой строки, удовлетворяющей "шаблон2", для каждой строки заменять последовательность "шаблон"  на "подстановка".
Диапазон строк можно задавать как {{начало}}[,{{конец}}], где {{начало}} = /шаблон/ или номер_строки или $ (конец файла) и.т.д.

Если "конец" не задан, то диапазон -- набор все строк, удовлетворяющих условию {начало}.

Общий синтаксис такой:

{{диапазон}} { {{операция1}} [; {{операция 2}} ...] ; }

,где {{диапазон}} задан как выше, а {{операция}} может быть подстановкой (s,что,на_что,), удалением строки полностью (d) и т.д.

https://www.gnu.org/software/sed/


Оффлайн tema

  • alt linux team
  • ***
  • Сообщений: 2 073
    • Email
Re: Скрипт sh, bash
« Ответ #7 : 11.01.2018 03:55:18 »
Большое пребольшое спасибо! :-)