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реалізації, які дуже швидкі, але, наприклад, вони не підтримують багатобайтові символи, тому вони можуть правильно працювати лише на американсько-англійському тексті у багатобайтових мовах. Або вони швидкі, тому що працюють на невеликому буфері фіксованої довжини і тому не можуть працювати на довільному введенні ...