我在一个名为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