Можно ли записать маленькую программу C? kill(2)
системный вызов действительно возвращается-1, если Ваш UID не имеет разрешения отправить сигнал в данный процесс, но errno
установлен на EPERM
в этом случае, в противоположность ESRCH
для несуществующего PID. Я довольно уверен, что Вы могли сделать это портативным через Солярис, HP-UX, Linux и *BSDs. Необходимо было бы скомпилировать его для каждой платформы.
Можно использовать grep
получить строки и grep -c
получить количество строк. Если Вам не нравится работать grep
два раза можно использовать tee
и замена процесса (следующее является синтаксисом удара):
grep abc-ERROR: input.txt | tee >( wc -l )
Как это:
$ cat file
# abc-ERROR: xyxxkkfgfr
# abc-ERROR: xyxxkkfgfr
# abc-ERROR: xyxxkkfgfr
# def-Error: aaaaaa
# abc-ERROR.cp
# abc-ERROR: asdgsdgaaf
# abc-ERROR: asdgsdgaaf
# abc-ERROR: tttttttttq
$ awk '/abc-ERROR: /{a[$0]++}END{for(k in a) printf "%d\t(count)\n%s\t(line)\n",a[k],k}' file
1 (count)
# abc-ERROR: tttttttttq (line)
2 (count)
# abc-ERROR: asdgsdgaaf (line)
3 (count)
# abc-ERROR: xyxxkkfgfr (line)
Я рекомендую сделать это двумя способами.
1) Поместите функцию в свой bashrc / bash_profile и создайте псевдоним для вызова этой функции (это сделает глобальное использование этого)
2) Создайте файл сценария оболочки и также можете создать псевдоним этого файла .
#!/bin/bash
function matchString(){
REGEX="$1"
FILE="$2"
RESULTS=$(grep -n "$REGEX" $FILE | awk -F ":" '{print $2 "\tLine: " $1}')
COUNT=$(echo $RESULTS | wc -l)
echo "Count: $COUNT"
echo $RESULTS
}
matchString $1 $2
Вызов этого файла (например, bash matchString.sh "abc-ERROR:" test.txt) на основе вашего текстового файла будет иметь следующий вид:
Count: 1
abc-ERROR Line: 1
- Эта функция принимает 1-й аргумент в качестве шаблона регулярного выражения (так что его можно повторно использовать в любом аналогичном сценарии) и ищет этот шаблон в файле, который вызывается вторым аргументом.
1-я строка вывода - это общее количество всех совпавших строк, а каждая следующая строка - это совпадение, за которым следует табуляция - номер строки этого совпадения.