BASH разбить строку и вернуть весь текст перед этим словом - PullRequest
0 голосов
/ 09 апреля 2020

У меня есть ситуация, когда у меня есть строка, содержащая информацию, которую мне нужно получить, и затем предупреждение, от которого я хочу избавиться:

Time Sync Status:       Local time: Mon 2020-04-06 19:25:43 EDT
  Universal time: Mon 2020-04-06 23:25:43 UTC
        RTC time: n/a
       Time zone: America/New_York (EDT, -0400)
 Network time on: no
NTP synchronized: no
 RTC in local TZ: yes


         Warning: This mode can not be fully supported. It will create various problems
         with time zone changes and daylight saving time adjustments. The RTC
         time is never updated, it relies on external facilities to maintain it.
         If at all possible, use RTC in UTC by calling
         'timedatectl set-local-rtc 0'.

Итак, я пытаюсь разделить Строка «Предупреждение» и получите текст до этого ... но я перепробовал много вещей, и у меня ничего не работает:

echo Time Sync Status: "$(timedatectl status | awk -F 'Warning' '{print $1}')"

Как мне этого добиться?

TIA Ron

1 Ответ

3 голосов
/ 09 апреля 2020

Не могли бы вы попробовать следующее.

awk '/Warning/{exit} 1' Input_file

ИЛИ

echo "$string" | awk '/Warning/{exit} 1'

Объяснение: Просто ищите слово Warning и как только это произойдет, просто выйдите из программы. Перед этим он напечатает каждую строку.



2-е решение: В случае, если вы хотите, чтобы все строки были перед словом Warning и хотите оставьте также пустые строки, затем попробуйте выполнить следующее.

awk '/Warning/{exit};NF' Input_file

ИЛИ

echo "$string" | awk '/Warning/{exit};NF'


3-е решение: В случае ОП хочет делать в своем стиле только потом попробовать (протестировано и написано в GNU awk). нам нужно установить разделитель записей, чтобы заставить ФС работать здесь.

awk -v RS="" -v FS="Warning" '{print $1}'  Input_file

ИЛИ

echo "$string" | awk -v RS="" -v FS="Warning" '{print $1}'
...