Как извлечь из строки подстроку, начинающуюся со слова

Простите за запоздалое дополнение по этой теме. Надеюсь, это поможет кому-то в какой-то момент.

Я хотел бы дополнительно добавить, что можно проверить, запущена ли служба ntpd из командной строки, как показано ниже (для дистрибутивов Linux, которые используют систему инициализации System V, и многие другие, которые обеспечивают эмуляцию и /или псевдоним):

[user@host ~]$ sudo service ntpd status
ntpd (pid 8374) is running...

Если служба запущена, вы можете остановить ее, нажав:

[user@host ~]$ sudo service ntpd stop
Shutting down ntpd:                                           [  OK  ]

Это было выполнено в приведенной ниже версии Linux:

[user@host ~]# cat /etc/version
2017 1 PCLinuxOS

С указанными ниже версиями внешнего интерфейса/графического интерфейса:

[user@host ~]$ kde4-config --version
Qt: 4.8.7
KDE Development Platform: 4.14.18
kde4-config: 1.0

Примечание. :параметр версии --можно использовать с любой «стандартной» программой KDE, такой как Konsole, Kate, Konqueror и т. д. То же самое можно сделать в графическом интерфейсе, выбрав раскрывающееся -меню «Справка». -> О KDE.

Я столкнулся с той же проблемой, когда служба ntpd, активная на моей рабочей станции, не позволяла графическому интерфейсу установить связь с внешней общедоступной службой NTP, настроенной в виджете [Модуль управления датой и временем KDE], что приводило к ошибке вы (и я оба )получили.

1
11.04.2021, 21:53
3 ответа

Вы можете использовать синтаксис ${var#pattern}, который удалит кратчайшее совпадение patternс начала переменной:

$ path="things useless things... path/another/files1/useful/path/here"
$ echo "${path#*another/}" 
files1/useful/path/here

Кроме того, вы можете использовать любой стандартный инструмент для анализа текста. Например:

$ newPath=$(sed -E 's|.*(files1/)|\1|'<<<"$path")
$ echo $newPath 
files1/useful/path/here
2
28.04.2021, 22:53

Как насчет (для файлового скрипта):

sed -n 's#\(path="\).*/\(files1/[^"]*"\)#\1\2#p' script

Или, если значение находится внутри переменной:


$ path="things useless things... path/another/files1/useful/path/here"

$ echo "/files1/${path##*/files1/}"

/files1/useful/path/here

3
28.04.2021, 22:53

Поскольку вы используете bash, вы также можете использовать его встроенный механизм регулярных выражений:

$ path="things useless things... path/another/files1/useful/path/here"
$ [[ "$path" =~ /files1/.*$ ]] && echo "$BASH_REMATCH"
/files1/useful/path/here
2
28.04.2021, 22:53

Теги

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