Bash

呼叫 sed 替換儲存在 bash 變數中的字元串

  • October 3, 2014

我想bashsedor擴展一個變數awk。這個變數是一個數組。

例如,腳本必須刪除數組中包含的字元串。我試過

ARRAY1=(
string1
string2
string3
)

sed -i '/${ARRAY1[@]}/d'  /etc/file

ARRAY1=(
string1
string2
string3
)

for i  in ${ARRAY1[@]} ;do sed -i '/$i/d'  /etc/file;done

但沒有一個有效,sed不擴展變數。

我怎樣才能做到這一點?

找到解決方案,使用""而不是''.

zsh

array1=(
 string1
 string2
 string3
)
sed -i -e/$^array1/d file

將刪除與$array1.

或者你可以這樣做(任何類似 Bourne 的 shell):

regexps='string1
string2
string3'
grep -ve "$regexps" file

或者,要搜尋字元串,請添加-F

grep -F -v -e$^array1 # (zsh)

或者:

strings='string1
string2
string3'
grep -F -ve "$strings" # (any shell)

引用自:https://unix.stackexchange.com/questions/158826