我在一个名为file.txt的文件中有类似的内容

AA.201610.pancake.Paul
AA.201610.hello.Robert
A.201610.hello.Mark

现在,我只得到三个变量中的前三个字段,比如:
field1="A"
field2="201610"
field3='hello'.

我想删除一行,如果它正好包含前3个字段,就像,在上面描述的情况下,我只想从file.txt中删除第三行。有办法吗?有没有办法在同一个文件中这样做?
我试过:
sed -i /$field1"."$field2"."$field3"."/Id file.txt

当然,这会同时删除第二行和第三行

最佳答案

我建议对此使用awk,因为sed只能执行regex搜索,这需要转义所有特殊的元字符和锚、单词边界等,以避免错误匹配。
建议的awk与非regex匹配:

awk -F '[.]' -v f1="$field1" -v f2="$field2" -v f3="$field3" '
    !($1==f1 && $2==f2 && $3==f3)' file

AA.201610.pancake.Paul
AA.201610.hello.Robert

10-08 07:11