grep和awk忽略特殊字符和空格,搜索2个文件

grep和awk忽略特殊字符和空格,搜索2个文件,awk,Awk,我有两张名单 a、 txt: I am a bad wolf (2015) you are a bad wolf (2020) we all - are bad wolf (1123) you are a bad wolf 2 (2021) b、 txt: I am - a bad wolf (2015) you are abad wolf (2019) 我希望输出文件c.c只包含b.txt中不存在的a.txt中的唯一行,并且忽略括号中的数字 c、 txt: we all -

我有两张名单

a、 txt:

I am a bad wolf (2015)  
you are a bad wolf (2020)  
we all - are bad wolf (1123)  
you are a bad wolf 2 (2021)
b、 txt:

I am - a bad wolf (2015)  
you are abad wolf (2019)
我希望输出文件c.c只包含b.txt中不存在的a.txt中的唯一行,并且忽略括号中的数字

c、 txt:

we all - are bad wolf (1123)  
you are a bad wolf 2 (2021)  
我试过
grep-ixvf a.txt b.txt>c.txt

但它并没有忽略这些空格和特殊字符

我猜这需要某种sed(删除特殊字符)| grep

任何帮助都是值得的…

假设“特殊字符”指的是通常不被视为单词成分的任何东西,即字母数字或下划线:

$ cat tst.awk
{
    key = $0
    gsub(/[^[:alnum:]_]|\([^()]+)/,"",key)
}
NR==FNR {
    a[key] = (key in a ? a[key] ORS : "") $0
    next
}
!(key in a)


请用代码标签包装您的样本/代码。如果您猜测这需要某种sed,那么用sed标记您的问题是有意义的。实际上,正确的解决方案不会使用sed或grep,因为您没有尝试使用
s/old/new/
(sed是正确的工具)或
g/re/p(grep是正确的工具),它将使用awk或等效工具,所以我将用awk替换grep标记。
$ awk -f tst.awk b.txt a.txt
we all - are bad wolf (1123)
you are a bad wolf 2 (2021)