Linux

bash + 如何從 var2 中刪除 var2 中定義的字元串

  • December 31, 2017

我在我的 bash 腳本中使用以下變數 - val1 ,val2

val1 代表應該在 OS linux 中的所有磁碟

val2 表示 OS linux 中的目前磁碟

我的目標是刪除磁碟“ $ val2" from " $ val1" 變數

val1="sdb sdc sdd sde sdf sdg sdh sdi sdj sdk"
val2="sdb sdc sdf sdd sde sdg"

預期成績:

val3=sdh sdi sdj sdk

並在 val3 中設置如下結果

有**sed**替換:

val3=$(sed -E 's/\<('"$(tr ' ' '|' <<<"$val2")"')\> *//g' <<<"$val1")
echo "$val3"
sdh sdi sdj sdk

  • $(tr ' ' '|' <<<"$val2")- 模仿正則表達式交替組,這將導致sdb|sdc|sdf|sdd|sde|sdg. 完整的結構應該看起來像\<(sdb|sdc|sdf|sdd|sde|sdg)\>
  • \<\>- 是單詞邊界

單程:

$ val1="sdb sdc sdd sde sdf sdg sdh sdi sdj sdk"
$ val2="sdb sdc sdf sdd sde sdg"
$ comm -23 <(echo "$val1" | sed "s/ /\n/g" | sort) <(echo "$val2" | sed "s/ /\n/g"| sort) | paste -sd" "
sdh sdi sdj sdk
$

echo "$val1" | sed "s/ /\n/g" | sort :扁平化變數列表並排序

comm -23:獲取扁平化 val1 獨有的內容

paste -sd" ":使用空格連接結果

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