#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