Как извлечь строки из текстового файла, содержащего строки, из списка в другом файле? [дубликат]

Если вывод такой, как указано выше, он находится на жестком диске. Вы можете получить / dev / root , посмотрев на командную строку ядра:

$ cat /proc/cmdline | grep root
BOOT_IMAGE=/boot/vmlinuz-3.19.0-32-generic root=UUID=0cde5cf9-b15d-4369-b3b1-4405204fd9ff ro

Итак, / dev / root эквивалентно разделу с UUID, указанным выше; ваши будут отличаться. Чтобы найти этот UUID, используйте

$ sudo blkid
/dev/sda1: UUID="0cde5cf9-b15d-4369-b3b1-4405204fd9ff" TYPE="ext4" 
/dev/sda5: UUID="37bc6a9c-a27f-43dc-a485-5fb1830e1e42" TYPE="swap" 
/dev/sdb1: UUID="177c3cec-5612-44a7-9716-4dcba27c69f9" TYPE="ext4" 

. Как видите, соответствующий раздел - / dev / sda1 . Итак, ваш / tmp находится на жестком диске. Еще один недостаток вывода df - точка монтирования / . Если вы смонтировали / tmp в ОЗУ, вместо этого вы получите

$ df /tmp
Filesystem     1K-blocks  Used Available Use% Mounted on
tmpfs            3640904    20   3640884   1% /tmp
4
26.07.2016, 18:03
2 ответа
grep -f <(sed 's/.*/\^&\\>/' town-list.txt) ma-towns.txt

Объяснение:

grep -f file читает file для получения списка шаблонов для сравнения. Мы ищем в списке ma-towns.txt, используя шаблоны из town-list.txt. Каждая отдельная строка рассматривается как новый шаблон, т.е. как новый поисковый запрос.

Однако этого недостаточно, поэтому я включил sed, чтобы отформатировать поисковые запросы следующим образом:

^Acton\>
^Adams\>
^Agawam\>

Символ ^ заставляет grep соответствовать шаблону только в начале строки, а \> заставляет grep соответствовать только в том случае, если слово заканчивается в этой точке.

Вместе это гарантирует, что поисковый запрос будет просматриваться только в начале строки (где находятся названия городов), и что поисковый запрос должен заканчиваться там, где заканчивается название города.


Сама команда sed выполняет команду s (замена) в виде s/search/replace/.

Поисковый запрос .* соответствует целой строке. Замена, \^&\\\>, заменяет ее на литеральный символ ^, за которым следует исходная строка, а затем текст \>.


Что делает этот ответ, чего не делает другой:

  • Обрабатывает названия городов, начинающиеся с тире или содержащие обратные слеши (что маловероятно, но если ввод осуществляется от пользователя, вы же не хотите, чтобы он мог непредсказуемо нарушить ваши скрипты). Обратите внимание, что оба ответа рассматривают названия городов как регекс, а не как буквальный поисковый запрос.
  • Выводит города в исходном порядке, как указано в ma-towns.txt
  • Работает лучше
  • Ищет название города в начале строки, а не в любом месте строки
  • Не ищет город, если совпадает только подстрока (например. Waterloo не будет соответствовать Waterlooville)
7
27.01.2020, 20:47

Это будет читать строки file2 и анализировать file1 с помощью grep с помощью строк :

while read line; do
  grep "${line}" file1
done < file2
5
27.01.2020, 20:47

Теги

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