Удалить точное имя из текстового файла

#bash

#bash

Вопрос:

У меня есть следующий код, который удаляет определенные строки из файла

 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. Привет и добро пожаловать в Stack Overflow. Вы только что написали второй вопрос, который очень похож на ваш первый. Возможно, вы могли бы рассмотреть возможность полного объяснения вашей проблемы, которую вы пытаетесь решить, и мы могли бы помочь. При текущей скорости вы зададите несколько вопросов, основываясь на предыдущем, в то время как в конечном итоге решением вашей проблемы может быть простая команда.

2. это другой вопрос, на самом деле исходный вопрос был решен. Мне просто нужно переработать grep, чтобы не включать все файлы

Ответ №1:

Итак, в вашем log.txt файле вы хотите :

  • совпадение 2.txt в одной строке
  • совпадению 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