从 txt 文件中删除确切的名称

Remove exact name from txt file

提问人:DDisciple 提问时间:4/16/2019 最后编辑:TanktalusDDisciple 更新时间:4/16/2019 访问量:52

问:

我有以下代码,可以从文件中删除某些行

ret=$(grep -m2 "$var" log.txt | tail -n1 ) 
 mv $var $ret                          
 grep -F -v $var log.txt > log.txt.tmp        
 mv log.txt.tmp log.txt     

我的日志文件如下所示

2.txt  
/home/etc/2.txt   

基本上是文件名及其原始位置

我想恢复文件,我的程序确实这样做了,但我也想要 从 log.txt 文件中删除文件的名称及其位置

现在上面的代码可以工作了,但它删除了所有实例,例如

它将删除 2.txt 和路径,这很好,但是如果我有一个名为 22.txt 的文件,它也会删除它。我需要它来删除 2.txt,但似乎正在删除其中带有“2.txt”的行。

是否可以只删除 2.txt,并且由于目录中有 /2.txt,因此也可以删除整行?

巴什

评论

1赞 kvantour 4/16/2019
您好,欢迎来到 Stack Overflow。你刚刚写了第二个问题,与你的第一个问题非常相似。也许您可以考虑解释您正在尝试解决的全部问题,我们可能会提供帮助。按照目前的速度,您将在前一个问题的基础上提出几个问题,而最终问题的解决方案可能是一个简单的命令。
0赞 DDisciple 4/16/2019
这是一个不同的问题,实际上原来的问题已经解决了。我只需要重新设计 grep 以不包含所有文件

答:

0赞 Mathieu 4/16/2019 #1

因此,在您的文件中,您需要:log.txt

  • 在单行上匹配2.txt
  • match 前面有某个路径。2.txt

您可以在 grep 中执行此操作:

# match all but lines beginning with $var, so 2.txt
grep -F -v "^$var" log.txt > log.txt.tmp        

# match all but lines containing "/$var", so "/2.txt"
grep -F -v "/$var" log.txt.tmp > log.txt