簡體   English   中英

bash腳本中的sed腳本

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM