С регулярным выражением типа диапазона, например /^c/ -- /^dd/
, вы можете использовать sed для отсортированного файла:
$ sed -nE '/^c/,/^dd/p' file.txt
caccount@example.com
daccount@example.com
ddaccount@domain.com
Или perl:
$ perl -ne 'print if /^c/ .. /^dd/' file.txt
caccount@example.com
daccount@example.com
ddaccount@domain.com
Или awk:
$ awk '/^c/,/^dd/' file.txt
caccount@example.com
daccount@example.com
ddaccount@domain.com
Исходя из нового сообщения:
Если вы хотите группировать по различным матчам регулярного выражения, awk
- ваша лучшая ставка (или несколько прогонов sed
grep
и т. Д.)
Пример:
$ cat file.txt
about
block
echo
far
maps
mjalgo
mjprou
mksomething
november
opshacom
oscar
softball
zorro
Вы можете сделать:
$ awk '/^[a-e]/ {print $0>"f1.txt"; next}
/^[f-k]/ || /^m[a-j]/ {print $0>"f2.txt"; next}
/^m[k-z]/ || /^[n-z]/ {print $0>"f3.txt"; next}
' file.txt
Затем у вас есть 3 ведра в 3 разных файлах:
for fn in f{1..3}.txt; do
sort "$fn"
echo "==="
done
Отпечатки:
about
block
blood
echo
===
maps
mjalgo
mjprou
===
mksomething
november
opshacom
oscar
softball
zorro
===
Если вход отсортирован, сортировка каждого файла не требуется.Если у вас gawk
против POSIX awk, вы можете отсортировать строки внутри.