Когда Вы хотите изменить файл, у Вас есть две опции, каждый с его преимуществами и недостатками.
Mcedit спрашивает Вас который стратегия выбрать. Странно, хотя, стратегия mcedit по умолчанию, для файлов с единственной записью каталога, состоит в том, чтобы усечь существующий файл, подвергнув Ваши данные опасности. Только то, когда безопасная стратегия разорвала бы жесткую связь, делает она дает Вам возможность использовать его. Можно измениться, это в “Редактировании сохраняет режим” диалоговое окно из меню параметров: “быстрое сохранение” означает перезапись, “безопасное сохранение” означает, сохраняют во временный файл, затем переименовывают. Когда безопасный режим выбран, Вы не получаете выбор не разорвать символьные связи.
(Наблюдения, сделанные на мГц 4.8.3. Если это все еще имеет место в последней версии, рассмотрите создание отчетов о ней как ошибку дизайна — “безопасный режим” должен быть значением по умолчанию, и необходимо получить опцию не разорвать жесткие связи в этом случае.)
Хорошие редакторы, такие как Vim или Emacs позволяют Вам выбрать стратегию по умолчанию.
Если ваша версия grep
поддерживает PCRE (GNU grep
делает это с опцией -P
или --perl-regexp
), вы можете использовать lookaheads для сопоставления нескольких слов в любом порядке:
grep -P '(?=.*?word1)(?=.*?word2)(?=.*?word3)^.*$'
Это не будет выделять слова. Обозрения - это утверждения нулевой длины, они не являются частью последовательности совпадения.
Думаю, ваше решение с трубами должно сработать для этого. По умолчанию grep
только раскрашивает вывод, когда он идет к терминалу, поэтому только последняя команда в трубопроводе делает подсветку, но вы можете переопределить это с помощью --color=always
.
grep --color=always foo | grep --color=always bar
Вы можете сделать это с одним ИЛИ-регенерацией. Учитывая содержимое файла:
This is my file
It has many words
There are also many chars
Следующая команда grep выделит 'my' и 'There' в одном аргументе:
grep -P -e '(there|my)' testfile
Просто отделите каждый шаблон регенерации с помощью |
(pipe) для указания ИЛИ.
Комплексный вариант будет генерировать все перестановки шаблонов, поставляют их на GREP
и надеюсь, что компилятор RegexP генерирует достаточно оптимизированное дерево поиска.
Но даже с небольшим количеством шаблонов, скажем, шесть, перестановки будут 6!, Или 720. Это делает для неловкой командной строки.
Но видя, как вы, кажется, не имеют ссорящих с трубопроводом GREP
, за исключением
, и это будет работать, но я хотел бы видеть цветной выход
, при условии, что при условии, что :
. Приемлемое решение было бы трубкой нескольких GREP
, каждый с одним шаблоном, в порядке возрастания вероятности чтобы минимизировать нагрузку.
Затем для обеспечения того, чтобы окраска работать, вы придется заставить GREP
в , полагая, что его стандартный выход - это терминал , используя Faketerm
или иным образом, Или если доступно (он должен быть), вы можете использовать опцию - Color = Anter
- Color =
cat file | grep --color=always pattern1 \
| grep --color=always pattern2 \
...
| grep --color=always patternN
(приятный поворот будет обернуть GREP
в одну строку Для выполнения подпунктом и генерировать строку программно, используя, например, SED
).
Вы можете раскрасить вывод с помощью sed
sed -n "/foo/{/bar/s/foo\|bar/\x1b[1;31m&\x1b[m/gp}"
Следующее легко запомнить, хотя смысл не так ясен:
cat file | grep pattern1 | grep pattern2 | grep pattern3 | grep -e pattern1 -e pattern2 -e pattern3