Этот выходит, как только находит первое совпадение:
tac hugeproduction.log | grep -m1 WhatImLookingFor
Ниже приведены 5 строк до и после первых двух совпадений:
tac hugeproduction.log | grep -m2 -A 5 -B 5 WhatImLookingFor
Не забудьте использовать -i
(нечувствителен к регистру), если только это не приведет к замедлению грепа.
Если вы знаете точную строку, которую ищете, то учтите fgrep
(Исправленная строка)
tac hugeproduction.log | grep -F -m2 -A 5 -B 5 'ABC1234XYZ'
Есть различные улучшения, которые вы можете внести в свой подход, но, сохраняя все то же самое, все, что вам нужно, это добавить еще одну строку в ваш сценарий, а затем вместо этого добавить последнюю строку ( >>
) of overwrite:
#!/bin/bash
echo -e "FileA\t\t\t\t\t\t\t\tFileB" > diff.txt
sort ~/Desktop/file1.txt > ~/Desktop/fileA.txt
sort ~/Desktop/file2.txt > ~/Desktop/fileB.txt
diff -y ~/Desktop/fileA.txt ~/Desktop/fileB.txt >> ~/Desktop/diff.txt
Лучше написать это
#!/usr/bin/env bash
file1="$1"
file2="$2"
printf "%-36s%36s\n" "FileA" "FileB"
diff -y <(sort "$file1") <(sort "$file2")
А затем запустить с:
script.sh file1.txt file2.txt > diff.txt
Это позволяет избежать создания ненужных временных файлов и не требует, чтобы имена файлов были жестко закодированы в скрипт.
В качестве альтернативы, если вы хотите, чтобы отображались фактические имена файлов, измените вызов printf
выше на
printf "%-36s%36s\n" "$file1" "$file2"