从文件中读取多个变量

时间:2017-06-26 18:52:51

标签: bash shell awk grep

我需要读取一个像

这样的行的文件
user=username1
pass=password1

如何将这样的多行读入单独的变量,如用户名和密码?

我会使用awk还是grep?我已经找到了用grep读取变量行的方法,但是我需要读取每个项目的文件吗?

最终结果是使用这些变量通过命令行访问数据库。所以我需要能够在其他命令中读取,存储和使用这些值。

4 个答案:

答案 0 :(得分:2)

如果生成文件的进程是安全的并且具有shell语法,则只需获取文件。

. ./file

否则文件可以在添加引号之前进行处理

perl -ne 'if (/^([A-Za-z_]\w*)=(.*)/) {$k=$1;$v=$2;$v=~s/\x27/\x27\\\x27\x27/g;print "$k=\x27$v\x27\n";}' <file >file2
. ./file2

答案 1 :(得分:1)

如果您想使用,那么

输入

$ cat file 
user=username1
pass=password1

阅读

$ user=$(awk -F= '$1=="user"{print $2;exit}' file)
$ pass=$(awk -F= '$1=="pass"{print $2;exit}' file)

输出

$ echo $user
username1
$ echo $pass
password1

答案 2 :(得分:0)

<强> file.txt的

write

要避免多次浏览文件user=username1 pass=password1 user=username2 pass=password2 user=username3 pass=password3

file.txt

输出:

#!/usr/bin/env bash

func () {
    echo "user:$1 pass:$2"
}

i=0
while IFS='' read -r line; do
    if [ $i -eq 0 ]; then
        i=1
        user=$(echo ${line} | cut -f2 -d'=')
    else
        i=0
        pass=$(echo ${line} | cut -f2 -d'=')
        func "$user" "$pass"
    fi
done < file.txt

答案 3 :(得分:0)

您可以为您的文件使用循环,但这可能是您正在寻找的功能。

$ echo 'user=username1' | awk -F= '{print $2}'
username1

使用-F标志将分隔符设置为=,然后从行中选择第2项。