[英]Sed script in bash script
我正在嘗試編寫一個僅在括號內提供代碼的腳本。 我制作了一個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
嘗試以下方法:
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變量之外的所有內容周圍使用單引號。
另一種方法是轉義外殼特有的字符。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.