Bash 脚本在匹配后打印单词

Kha*_*led 1 grep

我正在尝试通过 bash 脚本检查时钟是否同步。

所以首先我执行了timedatectl输出以下内容的命令:

Local time: Mi 2021-03-17 12:52:53 CET
              Universal time: Mi 2021-03-17 11:52:53 UTC
                    RTC time: Mi 2021-03-17 11:52:53
                   Time zone: Europe/Berlin (CET, +0100)
   System clock synchronized: yes
   systemd-timesyncd.service active: yes
             RTC in local TZ: no
Run Code Online (Sandbox Code Playgroud)

因此我们的目标是获得的价值System clock synchronizedyes,它分配给一个变量并打印。因此我做了以下工作:

1-# check if time synchronized
2-syncTime="$(timedatectl | grep 'System clock')" # returns the whole line
3-echo "$syncTime"# make sure the line is saved
4-ifTimeSynched="$( $syncTime | grep -oP 'synchronized: \K\w+')"  # this supposes to save the word 
                                                                 after synchronized:  
echo "$ifTimeSynched"
Run Code Online (Sandbox Code Playgroud)

第 4 行应该得到单词旁边的单词synchronized: 在这种情况下是yes但是,当我$ifTimeSynched如上所示打印时,它返回空行。

它没有抓住这个词的任何理由yes

预先感谢

Rav*_*h13 5

使用awk. 您需要System clock synchronized在命令的输出中搜索字符串timedatectl(作为输入传递给awk命令)并打印所需的列(字段),这是您案例中的最后一个字段。

ifTimeSynched=$(timedatectl | awk '/System clock synchronized/{print $NF}')
echo "$ifTimeSynched"
Run Code Online (Sandbox Code Playgroud)

  • 谢啦。你真是一座金矿 (3认同)