sed
і awk
є наборами grep
, є речі, які простіше зробити з тим чи іншим.
grep foo
можна написати sed '/foo/!d'
або awk /foo/
, але врахуйте:
grep -i foo
це повинно бути, sed '/[fF][oO][oO]/!d'
якщо ви не хочете розглянути нестандартні розширення типу GNU sed '/foo/I!d'
. Або з awk
: awk 'tolower($0) ~ /foo/'
або знову з допомогою розширення GNU: awk -v IGNORECASE=1 /foo/
.
Речі, які мають різні інструменти, добре справляються з іншими інструментами:
греп
grep
це простий інструмент , але дуже спеціалізовані режими роботи, які важче відтворити за awk
або sed
:
grep -i
для нечутливої відповідності випадку (див. вище)
grep -Fe "$string"
для фіксованої пошукову послідовність ( export string; awk 'index($0, ENVIRON["string"])'
з awk
, немає прямого еквівалента з sed
).
- (нестандартний)
grep -r
для рекурсивного пошуку
- (нестандартний)
grep -P
/ pcregrep
для perl-подібних регулярних виразів (у деяких sed
реалізаціях є perl-схожа підтримка regexp, хоча не найважливіша)
- (нестандартно),
grep -o
щоб повернути збірну частину (кілька рядків awk
або sed
зробити те ж саме)
- (нестандартно)
grep -A/B/C
для повернення контексту навколо матчу (знову болісно робити аналогічно з sed
або awk
)
sed
s/foo/bar/
: sed
's s
команда має функції, які важко реалізувати у awk
таких як:
s/foo\(.*\)bar/\1/g
: захоплення (хоча GNU awk має gensub()
для цього розширення)
s/foo/bar/3
: замініть 3-е виникнення у кожному рядку
- (нестандартне): на місці редагування файлів (хоча це також підтримується GNU
awk
).
awk
awk
є найбільш багатою функцією з цих трьох.
- добре для роботи з цифрами
- добре для роботи з введенням, відформатованим у стовпцях.
- добре підходить для вилучення та комбінування даних із різних джерел із його асоціативними масивами.
перл
perl
як практичний інструмент вилучення та звітності є найкращим з усіх. Саме для цього він був розроблений спочатку (щоб бути інструментом, який робить усіх тих sed
/ awk
застарілими).
Освоєння perl
обробки тексту дійсно дає серйозну перевагу. Я рекомендую витратити на це деякий час, навіть перш ніж переглядати, наприклад, менш поширені sed
команди.
виконання
Як правило, чим більш спеціалізований інструмент, тим найбільш ефективним він є у виконанні завдання. Але це також дуже залежить від реалізації, завдання та декількох інших факторів та результативності можуть мати компроміси, які, можливо, потрібно враховувати.
Наприклад, є деякі grep
або sed
реалізації, які дуже швидкі, але, наприклад, вони не підтримують багатобайтові символи, тому вони можуть правильно працювати лише на американсько-англійському тексті у багатобайтових мовах. Або вони швидкі, тому що працюють на невеликому буфері фіксованої довжини і тому не можуть працювати на довільному введенні ...