Можно вывести одно окно экранной сессии с screen -X hardcopy /some/file
, это сохранит снимок экрана текущего окна в /some/file
.
Можно вывести определенное окно с:
screen -X at 3 hardcopy /some/file
И все они в единственном файле с:
screen -X eval 'hardcopy_append on' 'at \\# hardcopy /some/file'
Можно также вывести один файл на окно путем определения, в каком каталоге вывести их (если Вы не указываете его, затем они будут выведены в каталоге screen
был запущен в) с
screen -X eval 'hardcopydir /some/dir' 'at \\# hardcopy'
(будет выведен в названных файлах hardcopy.<n>
)
Посмотрите -h
опция hardcopy
включать буфер прокрутки.
Использовать screen
-S
опция, как обычно, для определения сессии для выполнения команды в.
Чтобы быть как можно более эффективным, вы хотите остановиться после того, как будет найден первый матч. Если у вас GNU grep
, вы можете сделать это:
grep -m 1 '^user1@example\.com$' your_file
Если нет, вы можете использовать Perl:
perl -nlE 'say and last if $_ eq q{user1@example.com}' your_file
Смотрите опции -F
(фиксированная строка, в отличие от регулярного выражения) и -x
(точно: соответствовать всей строке).
grep -Fx user1@example.com text_file
будет эквивалентом:
grep '^user1@example\.com$' text_file
(помните, что .
является оператором регулярного выражения, который соответствует любому символу).
Используйте опцию -q
, если хотите проверить только наличие такой строки:
grep -Fxq user1@example.com text_file &&
echo yes, that address is in that file.
Если строка для поиска и имя файла переменная:
grep -Fxqe "$email" < "$file"
Или
grep -Fxq -- "$email" < "$file"
Вы не хотите:
grep -Fxq "$email" "$file"
так как это может вызвать проблемы, если $email
или $file
начинается с -
.
Если файл отсортирован (в вашей текущей локали, желательно C
), вы можете ускорить процесс, используя com
вместо grep
:
printf '%s\n' user1@example.com | comm -12 - text_file
Преимущество станет более очевидным, когда у вас будет несколько адресов электронной почты для проверки (например, в другом отсортированном файле):
comm -12 text_file emails_to_check
было бы быстрее, чем:
grep -Fxf emails_to_check text_file
Там много проверок электронной почты. Одна из них:
grep -E -o "\b[a-zA-Z0-9.-]+@[a-zA-Z0-9.-]+\.[a-zA-Z0-9.-]+\b" text_file
Для уточнения ответа.
Вы используете якорь ^
, который указывает на начало строки. Это не будет совпадать, если адрес электронной почты находится где-то между длинной строкой.
ваша команда grep
будет соответствовать всему, что начинается с ^user1@example.com
, включая сам адрес электронной почты, а также user1@example.com.spammer.com
. Начиная с .
является специальным символом в регулярных выражениях, который совпадает с любым ключом, его следует экранировать как \.
предполагая, что ваш текстовый файл содержит один адрес в строке, используйте:
EMAIL=user1@example\\.com
egrep "^${EMAIL}$" text_file
трейлинг $
, чтобы убедиться, что строка заканчивается после адреса электронной почты.
я также использую двойные кавычки "
, так как они позволяют использовать переменные (в отличие от одиночных кавычек '
)
Учитывая общее буквальное / точное соответствие строки:
grep -w "search_word" <file> > output.txt
#\b shows boundaries over here.
или,
grep "\bsearch_word\b" <file> > output.txt