【问题标题】:Passing variable that may contain a wildcard as an argument传递可能包含通配符作为参数的变量
【发布时间】:2019-03-28 01:51:26
【问题描述】:

我正在对两个变量 variable1 和 variable2 进行比较。如果两个变量之间有重复项,我想删除变量中的整行,其中重复项出现在变量 1 中。

例如:

variable1
-----
aaa* 
bbb
ccc*
ddd

variable2
-----
aaa* 
bbb

我的预期输出是:

variable1
-----
ccc*
ddd

我目前得到的输出:

variable1
------
aaa*
ccc*
ddd

这是我的脚本:

echo "$variable2" | sed "/"$variable1"/d" >> output.txt

为什么我的 variable1 参数没有捕获字符串末尾的通配符?

【问题讨论】:

  • 计算sed "/"$variable1"/d" 中的引号。对于每个人,问问自己 - 后面的文字是在引号内还是在引号外?您想要$variable1 的答案是什么?

标签: shell awk sed while-loop grep


【解决方案1】:

让你的变量在他们自己的文件中

$ cat var1.txt 
aaa*
bbb
ccc*
ddd

$ cat var2.txt 
aaa*
bbb

您可以使用comm(通用)命令来隔离两个文件的共同点或不同点。

$ comm -23 var1.txt var2.txt 
ccc*
ddd

标志 -23 表示不打印第二或第三输出列

  • 第一列是第一个文件唯一的行
  • 第二列是第二个文件唯一的行
  • 第三列是两个文件共有的行

两个文件都必须排序,否则comm 会抱怨。

【讨论】:

    猜你喜欢
    • 2015-05-18
    • 2014-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多