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

Одним из решений является удаление даты с конца с помощью cut. Такой подход привел бы к:

JAVA_MAJOR_VERSION=$($JAVA -version 2>&1 | sed -E -n 's/.* version "([^.-]*).*"/\1/p' | cut -d' ' -f1)

Этот подход разбивается на символ пробела (-d' ' )и берет первое поле. Основываясь на вводе, это приведет к удалению добавленной даты openjdk.

0
04.08.2020, 23:24
2 ответа

Один из подходов к этой проблеме состоит в том, чтобы экранировать все символы регулярных выражений в файле1. и на следующем шаге ограничьте строку с обоих концов. Обратите внимание, что порядок шагов — имп.

Это можно назвать hybrid regexподходом, при котором в фактической строке, которая должна быть сопоставлена, все ее символы регулярного выражения BRE удаляются, так что она становится литеральной строкой, в то время как на периферии мы размещаем символы регулярного выражения, чтобы ограничить совпадение как первое поле.

$ < file1 \
    sed -e '
      s:[[\.*^$]:\\&:g
      s/.*/^&[[:blank:]]/
'  | grep -f - file2

*Шаг -1 => визуализировать строку в файле1 как чистую строку по сравнению с -и -по отношению к grep с использованием выражений BRE.

*Шаг -2 => ограничить приведенную выше экранированную строку слева началом строки и справа пустым символом.

  • Imp note :Мы экранируем символы регулярного выражения BRE. Так что не вызывайте grepс -E.
0
18.03.2021, 23:14

Вы можете использовать приведенную ниже команду awk

awk 'NR==FNR{a[$1];next}($1 in a){print $0}' file1 file2
0
18.03.2021, 23:14

Теги

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