我有一个文件1:
hello
world
和file2:
hello A
hello X
world B
byebye C
我想从file2中删除与file1中的字符串匹配的所有行,以获得此输出:
byebye C
我是初学者编程所以我只想出这个:
for i in {1..2}
do p=`sed -n ${i}p file1`
sed '/$p\t\w/d' file2 > file2.tmp && mv file.tmp file2
done
感谢您的帮助!
答案 0 :(得分:3)
使用awk:
awk 'FNR==NR{a[$0];next} !($1 in a)' f1 f2
byebye C
使用grep -vf
grep -vFf f1 f2
byebye C
答案 1 :(得分:2)
您可以使用此grep命令
grep -vf file1 file2 > file2
您的编码:
for i in {1..2}
do
p=`sed -n ${i}p file1`
sed -i "/^$p/d" file2
done
答案 2 :(得分:1)
为什么你没有代码工作
sed
无法理解\w
解决方案使用-r
标记扩展正则表达式
'/$p\t\w/d'
变量未在单引号中展开
解决方案使用双引号代替
<强>校正的强>
$for i in {1..2} ;
do
p=`sed -n ${i}p file1`
sed -r "/$p\t\w/d" file2 > file2.tmp && mv file2.tmp file2
done
$ cat file2
byebye C
这将提供输出
byebye C
注意强>
Offcourse这提供了预期的输出,但总有一些其他简单的方法来完成任务,如在其他答案中