我正在使用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.*
答案 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)