我正在试着制作一个脚本,它只在外部大括号中提供代码。我做了一个bash脚本,我可以给我喜欢的大括号。然后我想在我的bash脚本中使用sed。我的sed脚本做它必须做的事情,因为当我在命令行上使用sed -f myscript时,输出是正确的。但我现在有问题来替换我在sed脚本中给我的bash脚本的大括号。这里是我的代码:bash脚本中的sed脚本
#/bin/bash
if [[ $# != 2 ]]
then
echo "Gebruik: verwijderhaakjes.sh <openend symbool> <sluitend symbool>"
exit
fi
if [ "${#1}" != 1 -o "${#2}" != 1 ]
then
echo "Fout: openend en sluitend symbool moeten uit één enkel karakter bestaan"
exit
fi
var1=$1
var2=$2
sed "
$!{
/^[a-zA-Z]/{
H
d
}
/^${var2}/{
H
d
}
/^[ ][ ]*/{
d
}
}
/^[${var2}a-zA-Z]/{
H
}
x
s/${var1}\n//g
s/${var2}//g
p
"
正如你所看到的,我已经使用了双引号,我用的sed脚本变量,所以我不知道为什么我没有得到任何输出。
例如:
testfile的:
aaa {
bbb
ccc {
ddd
eee
} fff {
ggg
hhh
}
iii
jjj
} kkk {
lll
mmm
} nnn
ooo
ppp
当我用我的sed脚本是这样的:
sed -f myscript.sed test.txt
输出是这样的:
aaa kkk nnn
ooo
ppp
这是对。 但是,当我在bash中使用我的sed脚本时,我没有得到任何输出。 我想的是:
cat test | bash bashscript.sh "{" "}"
aaa kkk nnn
ooo
ppp
或
cat test | tr '}' ']' | tr '{' '[' | bash bashscript.sh "[" "]"
aaa kkk nnn
ooo
ppp
也许添加一些输入样本?并添加预期的输出。 – konsolebox
@ user3371198对于长字符串,您可以使用[heredocs](https://en.wikipedia.org/wiki/Here_document#Unix_shells)。 – Biffen