使用bash脚本从文件访问单词

时间:2017-08-10 19:37:14

标签: bash

我有以下服务文件。

[Unit]
Description=Airflow celery worker daemon
After=network.target

[Install]
WantedBy=multi-user.target

[Service]
EnvironmentFile=-/etc/sysconfig/airflow
User=airflow
Group=airflow
Type=simple
Restart=on-failure
RestartSec=10s
ExecStart=/usr/local/bin/airflow worker -q Test

我想提取"测试"表单文件始终位于ExecStart=/usr/local/bin/airflow worker -q之后。它可以是任何东西,而不仅仅是"测试"。

我有以下代码:

file="file path"
while IFS= read line
do
        # display $line or do somthing with $line
        echo "$line"
        if [ "$line" = *"ExecStart"* ]; then
                echo "It's there!"
        fi


done <"$file"

但是,我无法echo It's there。如果任何人可以指导它提取&#34;测试&#34;那将是很大的帮助。在变量中,所以我可以使用以下命令在psql中转储。

sql -U postgres -d database_name -c "SELECT c_defaults  FROM user_info WHERE c_uid = 'Test'"

1 个答案:

答案 0 :(得分:1)

如果您不介意使用awk而不是纯粹的Bash, 这可以很容易:

awk '/^ExecStart=/ { print $NF; exit }' /path/to/input

您可以通过换入$(...)

将其保存在变量中
word=$(awk '/^ExecStart=/ { print $NF; exit }' /path/to/input)

然后你可以将它嵌入SQL命令中:

sql -U postgres -d database_name -c "SELECT c_defaults  FROM user_info WHERE c_uid = '$word'"

或纯粹的Bash解决方案:

read_word() {
     while read line; do
         [[ "$line" == ExecStart=* ]] || continue
         echo ${line//* }
         return
     done < /path/to/input
}

word=$(read_word)