在sed脚本和bash脚本之间传递变量
我有一个最多有5个参数的shell脚本。存在带有占位符的文件。我想使用sed脚本文件,具体取决于一个变量。问题是,当我在sed脚本中定义了变量时,这些变量的值不会放在占位符中在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_/
#!/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