Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 替换从文件读取的行中的变量_Bash - Fatal编程技术网

Bash 替换从文件读取的行中的变量

Bash 替换从文件读取的行中的变量,bash,Bash,我已读取包含以下变量的配置文件: export BASE_DIR="\usr\usr1" 在同一个脚本中,我逐行读取一个文件,我想用\usr\usr1替换${BASE\u DIR} 在脚本中: while read line; do echo $line done <file.txt 读行时;做 回音$线 完成可以使用sed,此命令将搜索并替换一个值。美元符号是分隔符 sed -ie 's$\${BASE_DIR}$\\usr\\usr1$1' hello.txt 可以使用sed,

我已读取包含以下变量的配置文件:

export BASE_DIR="\usr\usr1"
在同一个脚本中,我逐行读取一个文件,我想用
\usr\usr1
替换
${BASE\u DIR}

在脚本中:

while read line; do
echo $line 
done <file.txt
读行时
;做
回音$线

完成可以使用sed,此命令将搜索并替换一个值。美元符号是分隔符

sed -ie 's$\${BASE_DIR}$\\usr\\usr1$1' hello.txt

可以使用sed,此命令将搜索和替换一个值。美元符号是分隔符

sed -ie 's$\${BASE_DIR}$\\usr\\usr1$1' hello.txt

读取包含赋值的行时,需要设置变量。那你以后可以换了

#!/bin/bash
while read line; do
    if [[ $line =~ ^BASE_DIR= ]]
    then basedir=${line#BASE_DIR=}
    fi
    line=${line/'${BASE_DIR}'/$basedir}
    printf "%s\n" "$line"
done < file.txt > newfile.txt
#/bin/bash
读行时;做
如果[$line=~^BASE\u DIR=]]
然后basedir=${line#BASE#u DIR=}
fi
line=${line/'${BASE_DIR}'/$basedir}
printf“%s\n”$line
完成newfile.txt

读取包含赋值的行时,需要设置变量。那你以后可以换了

#!/bin/bash
while read line; do
    if [[ $line =~ ^BASE_DIR= ]]
    then basedir=${line#BASE_DIR=}
    fi
    line=${line/'${BASE_DIR}'/$basedir}
    printf "%s\n" "$line"
done < file.txt > newfile.txt
#/bin/bash
读行时;做
如果[$line=~^BASE\u DIR=]]
然后basedir=${line#BASE#u DIR=}
fi
line=${line/'${BASE_DIR}'/$basedir}
printf“%s\n”$line
完成newfile.txt

@Aavik
echo$(…)
是多余的。我想他想用变量的值替换
${BASE\u DIR}
,而不是硬编码到脚本中的字符串。@melpomene我有echo$(…),因为我想将此内容写入文件。echo$(eval echo${line})>file1。有更好的方法吗?@Aavik是的,只需删除
echo$(…)
并执行
eval echo“${line}”>file1
@Aavik
echo$(…)
是多余的。我想他想用变量的值替换
${BASE_DIR}
,而不是硬编码到脚本中的字符串。@melpomene我有echo$(…)因为我想把这些内容写入一个文件。echo$(eval echo${line})>file1。有更好的方法吗?@Aavik是的,只需删除
echo$(…)
并执行
eval echo“${line}”>file1