Возьмите grep значение и выведите количество и значение вместе

Я пытаюсь создать скрипт bash, который будет показывать значение grep и выводит счетчик и значение вместе

Что-то вроде этого

grep -c 'Thenis' example.txt > example.lst 

Но в этом файле списка не только показано количество, но и значение, которое я ввел как это

 Thenis: 123 

6 Solutions collect form web for “Возьмите grep значение и выведите количество и значение вместе”

Вы можете запустить подклассу и использовать переменную $0 для этого.

 bash -c 'echo "$0: $(grep -c $0 example.txt)"' 'Thenis' > example.lst 

Поскольку grep -c выводит только число, нам нужно префикс с заданным шаблоном. Это можно сделать, используя встроенную оболочку printf для печати шаблона без следующей новой строки. Затем мы разрешим grep печатать счетчик (в той же строке).

Использование скобок для размещения обоих операторов в под-оболочке позволяет перенаправить все выходные данные только один раз.

Я бы сделал это так:

 (printf '%s: ' Thenis; grep -c Thenis example.txt) > example.lst 

Если вы хотите сделать простой скрипт для этого:

 #!/bin/sh if [ "$#" -ne 2 ] then echo >&2 "Usage: $0 pattern file" exit 1 fi printf '%s: ' "$1" grep -c "$1" "$2" 

Никто еще не пытался использовать sed?

 grep -c Thenis example.txt|sed s/^/Thenis:\ / > example.lst 

или если вы хотите более универсальное решение и имеете gnu sed

 echo Thenis -- example.txt | \ sed -re 's/^(.*) -- (.*)$/echo -n \1:;grep -c \1 \2/e' 

слово предупреждения на последнем: достаточно мощное, чтобы стрелять в ногу.

Вы можете автоматизировать это с помощью переменных. Также вы можете встроить вывод команды с символом `

В строке ниже измените значение outputFile=/dev/stdout на свое собственное значение,

 string='Thenis'; inputFile=example.txt; outputFile=/dev/stdout; echo "${string}: `grep -c ${string} ${inputFile}`" > ${outputFile} 

Или в разных строках

 string='Thenis' inputFile=example.txt outputFile=/dev/stdout echo "${string}: `grep -c ${string} ${inputFile}`" > ${outputFile} 

Кроме того, для кавычек вы можете использовать либо «или». Для переменных либо $ var of $ {var}, как вы предпочитаете.

Удачи

Попробуйте написать script.sh :

 #!/bin/bash echo $1: $(grep -c "$1" "$2") 

Поэтому, если example.txt :

 Then is, Then-is, Then's, Thenis, Thins, Thesis, Thanes, Thence, Things, Thenis, Thorns, Thane's 

Запустите script.sh в командной строке, сохранив его вывод в example.lst :

 $ ./script.sh 'Thenis' example.txt > example.lst 

Желаемый searchword: count результат searchword: count можно найти в example.lst :

 $ cat example.lst Thenis: 2 

Детали

  • как и во всех сценариях, убедитесь, что скрипт выполним, например, путем выдачи команды sudo chmod +x script.sh
  • Базовые позиционные параметры: $1 для первого аргумента, переданного script.sh , $2 для второго и т. д.
  • $() является подстановкой команд, чтобы получить результаты команд, содержащихся, для использования echo

Вместо этого вы можете использовать awk . Он намного более гибкий.

Например, для эмуляции grep -c вы можете использовать:

 awk '/Thenis/{total+=1}END{print "Thenis: ",total}' 

Обратите внимание, что в этом случае (это относится и к grep ) учитываются только строки со словом Thenis. Это не счет слова Тенис. Если вам нужно подсчитать количество слов Thenis в файле, вы можете использовать следующую конструкцию awk :

 awk '/Thenis/{total+=gsub("Thenis","")}END{print "Thenis: ",total} 

или путь с переменными (чтобы ввести Thenis только один раз)

 awk -v word="Thenis" '$0 ~ word{total+=gsub(word,"")}END{print word,": ",total} 
  • Был ли «\ 0» в конце каждого скрипта?
  • Где я могу найти скрипт оболочки для команды ls?
  • Я пытаюсь подсчитать и распечатать имена файлов песен, используя awk, следующим образом
  • BASH: группировка файлов по имени
  • Curl url txt file, но grep каждый URL отдельно от одного файла
  • Расширение переменной в круглых скобках и котировках
  • Создание скрипта sh в программе
  • Понимание сценария сигнала
  • Как запросить ввод от пользователя из переменной или массива bash?
  • Как искать ссылки на строки в указанном месте?
  • Как включить команду Diff в скрипт bash с подсказкой
  • распаковать вложенные .zip-файлы по сценарию оболочки
  • Linux и Unix - лучшая ОС в мире.