从句子中删除逗号分隔的单词列表

时间:2016-11-03 14:39:23

标签: arrays shell unix awk sed

我有两个变量如下:

sentence="name string,age int,address string,dob timestamp,job string"
ignore="age int,dob timestamp"

基本上我需要遍历逗号分隔变量$ignore并从上面的变量$sentence中删除每个单词。

执行此操作后,输出句子应如下所示:

echo $outputsentence
name string,address string,job string

我应该为要忽略的单词创建一个数组并迭代它,执行一个sed操作吗?还有其他方法吗?

2 个答案:

答案 0 :(得分:1)

这是一种需要集合的情况:您想知道集合B中不存在集合A的哪些成员。

为此我们有一篇精美的文章Set Operations in the Unix Shell来描述所有这些文章。

如果要检查集合的交集,请说:

$ comm -12 <(tr ',' '\n' <<< "$sentence" | sort) <(tr ',' '\n' <<< "$ignore" | sort)
age int
dob timestamp

如需补充,请使用comm -23

$ comm -23 <(tr ',' '\n' <<< "$sentence" | sort) <(tr ',' '\n' <<< "$ignore" | sort)
address string
job string
name string

注意tr ',' '\n' <<< "$var" | sort只需将,分隔的字符串拆分为切片。然后,<( )process substitution

答案 1 :(得分:1)

使用GNU sed:

pattern=$(sed "s/,/|/g" <<< "$ignore")
outputsentence=$(sed -r 's/('"$pattern"'),*//g' <<< "$sentence")

第一个sed命令用忽略列表中的交替运算符,替换所有|

此结果用作从$sentence中删除字符串的模式。