我正在尝试创建一个脚本,它只给我括号外的代码。我做了一个bash脚本,我可以给我喜欢的括号。然后我想在我的bash脚本中使用sed。我的sed脚本做了它必须做的事情,因为当我在命令行上使用sed -f myscript时,输出是正确的。但是我现在有问题要在sed脚本中替换我给bash脚本提供的大括号。这是我的代码:
#/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
答案 0 :(得分:0)
请改为尝试:
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表达式周围使用双引号,shell将扩展像$
,*
等字符。所以除了shell变量之外,你需要使用单引号。
另一种方法是转义shell特有的字符。