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

在sed脚本和bash脚本之间传递变量,bash,sed,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_/

我有一个最多有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

如果您的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

您需要创建sed脚本作为bash脚本的一部分,以便进行变量替换:

#!/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
#/bin/bash
A=$1
B=2美元
cat>>script1.sed>file.txt

谢谢,但我希望避免在bash脚本中保留sed脚本定义。它将更易于维护,无需触及生产脚本本身。这只是一个示例。那些sed脚本将占用我更长的时间,我需要扩展它。第二个命令缺少其初始
s
。此外,您正在读写完整的文件两次;您可以将这些命令组合到
“s/\u PH1\uu/$A/g;s/\u PH2\uu/$B/g”
中,并在一个过程中处理该文件。在管道上运行
sed-i
没有任何意义
-i
仅在
sed
被赋予一组要操作的文件名参数时才能工作。
$ 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