2016-03-25 83 views
0

可以說我有一個包含以下字符串變量(由空格分開,但時呼應它看起來像行):刪除字符串中的某些行?殼牌

animal:whale 
animal:dog 
animal:2_mice 
animal:cat 

而且我有一個包含我想從刪除的動物的名字另一個變量第一個由空格分隔的字符串。

比方說names="cat dog"

我將如何去刪除包含從第一串貓,狗行?

我試過了查找sed和grep方法,但還沒有找到任何可以工作到目前爲止的信息。

我還應該指出表達式需要完全匹配,所以如果第二個變量只包含ca而不是cat,那麼cat不應該被刪除。

+0

應該是逗號分隔或空格分隔的名字? – Alec

+0

空間。 names變量的內容可以包含多個動物的名稱,每個動物由空格分隔。 – Daeto

+1

變量的確切值是什麼?你可以顯示'printf'%q \ n「」$ var「'輸出 – anubhava

回答

1
echo "$variable" | grep -Ev ":($(echo "$names" | sed 's/ /|/g'))$" 
+1

'echo $ variable'將放棄換行符(用空格替換它們)。 –

+0

這似乎已經成功了! :)我猜測換行符並不重要,但-P可能是一個問題,因爲我更喜歡儘可能多的通用解決方案。 – Daeto

+1

切換到-E的便攜性,並添加了支持,以確切地匹配從行到行尾的所有內容 – Alec

0

使用grep反搜索,假設在名稱變量的值是空格分隔每一個字:

$ echo "$var" 
animal:whale 
animal:dog 
animal:2_mice 
animal:cat 

$ echo "$names" 
cat dog 

$ echo "$var" | grep -v $(printf ' -e :%s$' $names) 
animal:whale 
animal:2_mice