从文件读入变量 - Bash Script

时间:2014-04-30 14:16:16

标签: mysql linux bash list shell

我正在使用bash脚本来备份MySQL。我需要从文件中读取一系列字符串并将它们传递给我脚本中的变量。例如:

这样的东西将在文件(file.txt)

database1 table1
database1 table4
database2
database3 table2

我的脚本需要读取文件并将这些字符串放在一个变量中:

#! bin/bash
LIST="database1.table1|database1.table4|database2|database3.table2"

编辑。我改变了主意,现在我需要这个输出:

database1.table1.*|database1.table4.*|database2*.*|database3.table2.*

4 个答案:

答案 0 :(得分:6)

您可以使用tr替换换行符和空格:

LIST=$(tr ' \n' '.|' < file.txt)

由于输入文件的最后一行可能本身包含换行符,因此您需要删除它:

LIST=$(tr ' ' '.' < file.txt | paste -sd'|')

答案 1 :(得分:5)

使用awk:

s=$(awk '{$1=$1}1' OFS='.' ORS='|' file)
LIST="${s%|}"

echo "$LIST"
database1.table1|database1.table4|database2|database3.table2

答案 2 :(得分:3)

bash(我相信版本4)

mapfile -t lines < file.txt           # read lines of the file into an array
lines=("${lines[@]// /.}")            # replace all spaces with dots 
str=$(IFS='|'; echo "${lines[*]}")    # join the array with pipe
echo "$str"
database1.table1|database1.table4|database2|database3.table2

mapfile -t lines < file.txt
for ((i=0; i<${#lines[@]}; i++)); do
    [[ ${lines[i]} == *" "* ]] && lines[i]+=" *" || lines[i]+="* *"
done
str=$(IFS='|'; echo "${lines[*]// /.}") 
echo "$str"
database1.table1.*|database1.table4.*|database2*.*|database3.table2.*

答案 3 :(得分:2)

如果数据不出现,您可以使用sed替换所需的字符。

例如

FOO=$(sed '{:q;N;y/ /./;s/\n/|/g;t q}' /home/user/file.txt)