在sed脚本和bash脚本之间传递变量

时间:2018-07-20 16:55:26

标签: bash sed

我有一个多达5个参数的Shell脚本。有带占位符的文件。我想根据一个变量使用sed脚本文件。问题是,当我在sed脚本中定义了变量时,这些变量的值未放入占位符。

#!/bin/bash
A=$1
B=$2
echo "Some string with _PH1_ place holders _PH2_"|sed -i -f script1.sed >> file.txt

一个sed脚本文件

#Sed script 1
s/_PH1_/${A}/g
s/_PH2_/${B}/g

3 个答案:

答案 0 :(得分:0)

如果您的sed脚本那么短,那么最好将其内联到bash中:

#!/bin/bash
A=$1
B=$2
#your sed commands but still part of the bash script:
sed -i -e "s/_PH1_/${A}/g" file.txt
sed -i -e "/_PH2_/${B}/g" file.txt

答案 1 :(得分:0)

您需要在sash脚本中创建sed脚本,以便进行变量替换:

#!/bin/bash
A=$1
B=$2

cat >> script1.sed << EOF
s/_PH1_/${A}/g
s/_PH2_/${B}/g
EOF

echo "Some string with _PH1_ place holders _PH2_"|sed -i -f script1.sed >> file.txt

答案 2 :(得分:0)

$ cat tst.sh
#!/bin/bash
set -a

A="$1"
B="$2"

sedScript=$(mktemp)

printf 'sed "\n' >> "$sedScript"
cat script1.sed  >> "$sedScript"
printf '"\n'     >> "$sedScript"

echo "Some string with _PH1_ place holders _PH2_" | "$sedScript"

rm -f "$sedScript"

$ ./tst.sh foo bar
Some string with foo place holders bar