grep с использованием файла

У меня есть 2 файла, и я хочу найти разницу и вывести только то, что не находится внутри ex2

Если использовать grep -Ff ex2.txt ex1.txt , он покажет мне abcd , если я использую ту же команду с -v , вывода не будет. Почему с первой командой также выводится d ?

Каким будет самый простой способ сделать это? Подходит ли для этого grep? Может быть, diff, может быть, скрипт, который будет читать каждую строку и выводить, есть ли она или нет?

cat ex1.txt
a
b
c
d

cat ex2.txt
a
b
c

Редактировать - мои выходные данные выглядят следующим образом:

cat ex2.txt
a
b
c

cat ex1.txt
a
b
c
d

grep -vf ex2.txt ex1.txt

grep -f ex2.txt ex1.txt
a
b
c
d
0
04.10.2016, 13:52
3 ответа

Попробуйте изменить порядок файлов:

grep -v -f ex2.txt ex1.txt
> d
0
28.01.2020, 02:47

Невозможно воспроизвести вашу ошибку:

cat ex2.txt 
a
b
c

cat ex1.txt 
a
b
c
d

grep -vf ex2.txt ex1.txt 
d

grep -f ex2.txt ex1.txt 
a
b
c

grep -Ff ex2.txt ex1.txt 
a
b
c

grep -vFf ex2.txt ex1.txt 
d

grep -V
grep (GNU grep) 2.20

lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description:    Debian GNU/Linux 8.5 (jessie)
Release:    8.5
Codename:   jessie


Изменить (в OS X с BSD grep):

cat ex2.txt 
a
b
c

cat ex1.txt 
a
b
c
d

grep -f ex2.txt ex1.txt 
a
b
c

grep -vf ex2.txt ex1.txt 
d

grep -Ff ex2.txt ex1.txt 
a
b
c

grep -v -Ff ex2.txt ex1.txt 
d

grep -V
grep (BSD grep) 2.5.1-FreeBSD
0
28.01.2020, 02:47

grep не совсем подходящий инструмент для этой работы, но беглый просмотр справочной страницы grep должен помочь (обратите внимание, что grep ] будет полудикие различаться между дистрибутивами, так как некоторые могут использовать GNU по умолчанию, а другие могут использовать что-то еще).

  • -F ... Фиксированные строки (разделенные новой строкой) - (Категория: выбор сопоставления)
  • -f ... Имя файла (Категория: контроль сопоставления)
  • -v ... Инвертировать сопоставление (Категория: контроль соответствия)

Итак, вы можете представить, что подойдет что-то вроде grep -Fvf ex2.txt ex1.txt . Однако это не лучшее решение , так как оно требует, чтобы вы уже кое-что знали о файлах перед запуском. Существуют более эффективные инструменты (например, варианты diff ), чтобы дать вам более конкретные и более точные различия между файлами и / или каталогами.

Редактировать: Фиксированные строки, а не Огненные строки (черт побери, автоповреждение)

1
28.01.2020, 02:47

Теги

Похожие вопросы