Я думаю, вы можете использовать
public static class MyFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
Context context = getActivity.getContext();
}
}
Почему вы проходите -c
? Это просто покажет количество матчей. Точно так же нет причин использовать -r
. Я предлагаю вам прочитать man grep
.
Чтобы grep для двух слов, существующих в одной строке, просто выполните:
grep "word1" FILE | grep "word2"
grep "word1" FILE
будет печатать все строки с word1 в их из FILE, а затем grep "word2"
напечатает строки, в которых есть слово2. Следовательно, если вы объедините их с помощью канала, он отобразит строки, содержащие как word1, так и word2.
Если вам просто нужно подсчитать, сколько строк имеет 2 слова в одной строке, выполните:
grep "word1" FILE | grep -c "word2"
Кроме того, чтобы ответить на вопрос, почему он застревает: в grep -c "word1"
вы не указали файл. Поэтому grep
ожидает ввода от stdin
, поэтому он, кажется, виснет. Вы можете нажать Ctrl + D, чтобы отправить EOF (конец файла), чтобы он ушел.
вы можете использовать awk. как это ...
cat <yourFile> | awk '/word1/ && /word2/'
Порядок не важен. Итак, если у вас есть файл и ...
файл с именем, файл1 содержит:
word1 is in this file as well as word2
word2 is in this file as well as word1
word4 is in this file as well as word1
word5 is in this file as well as word2
, тогда
/tmp$ cat file1| awk '/word1/ && /word2/'
приведет к тому,
word1 is in this file as well as word2
word2 is in this file as well as word1
Да, awk работает медленнее.
Чтобы grep два слова в одно и то же время, используйте эту команду оболочки:
eval "</dev/stdin $(printf "|grep '%s'" word1 word2)" FILE
Если вы используете это чаще, это можно определить как псевдоним:
alias grep-all="</dev/stdin $(printf "|grep '%s'" word1 word2)"
Затем выполните просто:
grep-all FILE
Если у вас несколько паттернов, хранящихся в файле, см.: Совпадают все шаблоны из файла сразу .
Также проверьте: Как запустить grep с несколькими шаблонами AND?
Основная проблема заключается в том, что вы не поставили первый grep с любым вводом. Вам нужно будет переупорядочить свою команду как
grep "word1" logs | grep "word2"
. Если вы хотите подсчитать вхождения, тогда поставьте '-c' на второй grep.
"$@"
расширяется до всех аргументов, переданных сценарию оболочки (которые не были сдвинуты). Это может быть список имен файлов, или он может быть пустым, и в этом случае grep
будет считываться со стандартного ввода. В исходном коде в вопросе также не упоминаются имена файлов. Поэтому он будет считываться со стандартного ввода.
– Jonathan Leffler
27 October 2014 в 15:18
Используйте grep:
grep -wE "string1|String2|...." file_name
Или вы можете использовать:
echo string | grep -wE "string1|String2|...."
grep word1 file_name | grep word2
, который кажется мне самым простым способом
Попробуйте кошку с помощью команды
cat log|grep -e word1 -e word2