Linux
bash + 如何從 var2 中刪除 var2 中定義的字元串
我在我的 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" "
:使用空格連接結果