Я решил попытаться решить эту проблему с помощью команды GNU sed e
.
Это позволяет знакомым с sed командам встроенных командных оболочек выполнять такие действия, как подсчет слов.
Идея заключалась в том, чтосжать каждую секцию до одной строки и передать ее в grep -ow value | wc -l
для подсчета вхождений слова «значение».
Команда: sed -f char.sed input-file
Где командный файл char.sed
для sed это:
:a
/exit/{
s/\n/ /g
s/-/b/g
s/^/echo /
s/$/ | grep -ow value | wc -l/
e
n
}
N
ba
Что означает N
в каждой строке до тех пор, пока /exit/
в этой точке символы новой строки не будут заменены пробелами, тире заменены на b (так что «значение по умолчанию» нене соответствует grep -w value
).Затем всей строке предшествует echo
и суффикс | grep -ow value | wc -l
.Команда e
затем используется для выполнения команды в том виде, в котором она создана, и вставляет вывод команды в выходной поток.