начало fgrep строки?

Вы удачливы, что Ваш перебирающий жир о прописных буквах, поскольку пользовательские команды должны начаться с такого. В общем случае cmdalias.vim плагин предлагает способ создать произвольные псевдонимы. Это также прозрачно обработает все варианты аргумента :w {file}, :w!, и т.д.

4
22.01.2015, 00:54
4 ответа

С помощью GNU grep, если он собран с поддержкой PCRE и предположить, что $string не содержит \E, можно сделать:

grep -P "^\Q$string"
4
27.01.2020, 20:49

Если ваши данные очень большими, Затем GREP , вероятно, будет быстрее, чем более гибкие инструменты, такие как awk. То, что я бы сделал, это процитировать специальные символы в тексте и звоните GREP .

pattern=$(printf '%s\n' "$literal_text" | sed 's/[\[.*^$]/\\&/g')
grep "^$pattern" my-big-file

Если текст содержит только символы ASCII, установите набор символов C, так что GREP только касается себя байтами. В некоторых реализациях (таких как многие версии GNU GREP) многобайтовые символы могут вызвать значительную скорость наказания.

LC_CTYPE=C grep "^$pattern" my-big-file

Если вы хотите найти точную целую строку, то есть вариант для этого: GREP -FX -E «$ lictal_text» . Но это только соответствует строкам, которые состоят из именно указанного текста, нет аналогичного способа соответствия строкам, которые начинаются с указанного текста.

2
27.01.2020, 20:49

Если у вас нет слишком много шаблонов:

perl -ne 'BEGIN {$exp = quotemeta("miss.")} print if /^$exp/'

Я не знаю, как эффективно расширить это на GREP -F (чтение шаблонов из файла, который Вы бы сделали, если бы у вас было серьезное количество шаблонов для решения), но Это так отвечает при объединении запросов, кажется интересным.

0
27.01.2020, 20:49

с awk

awk -vword='miss.' 'index($0, word) == 1' file

для нескольких слов

awk 'BEGIN{for (i=2; i<ARGC; ++i)word[++j]=ARGV[i]; ARGC=2}
    {for (i=1; i<=j; ++i)if (index($0, word[i]) == 1){print; continue}}' file \
    word1 word2 word3

Я также воображает Python для этого

python3 -c 'import sys
words = tuple(sys.argv[1:])
for line in sys.stdin:
  print(line if line.startswith(words) else "", end="")
' <file word1 word2 word3 
2
27.01.2020, 20:49

Теги

Похожие вопросы