Я бы просто использовал grep (здесь предполагается GNU grep
):
grep -o "'[^']*\.swf'" input.txt > output.txt
-o
печатает только совпадающую часть, а не всю строку. "'[^']*\.swf'"
- это шаблон для поиска, заключенный в "
, так что в нем могут быть "
. Он соответствует начальному '
, затем [^']*
, то есть неопределенному количеству не'
символов, затем .swf
(N.B. вы должны экранировать .
как \.
, так как .
имеет особое значение в регулярных выражениях. input.txt
- входной файл для чтения. > output.txt
перенаправит вывод в этот файл. Если вы удалите эту часть, вы сможете предварительно просмотреть вывод на экране. Если GNU grep
не установлен, можно попробовать следующее (вдохновленное идеей замены от terdon).
tr -d '\n' output.txt
tr -d '\n' прочитает из input.txt
, затем удалит все переносы строк (\n
).
tr "'" '\n'
преобразует все '
в переносы строк. Это означает, что каждая строка ранее была окружена '
. head -n -1 | tail -n +2
. Однако, если исходный текстовый файл начинался с something.swf'
или заканчивался 'something.swf
, они были бы на своей собственной строке, несмотря на наличие только одного '
, и были бы ошибочно обнаружены следующим grep
. Если бы, однако, первая или последняя строка правильно содержала обе кавычки, на этом этапе был бы дополнительный перевод строки в начале или в конце. Следовательно, этот сегмент кода отделяет последнюю и первую строку, чтобы соответствовать только этому сценарию. grep '\.swf$'
будет искать строки, которые заканчиваются на .swf
. Вы можете рассчитать процент ЦП с помощью следующего кода:
#!/bin/bash
FILE=<file path>
CPU_USAGE=`sed -n 'H; /^USER/h; ${g;p;}' $FILE | awk '{print $3}' | awk '{sum+=$1} END {print sum ;}'`
CPU_CORES=`nproc --all`
ACTUAL_CPU_USAGE=`echo "$CPU_USAGE $CPU_CORES" | awk '{print $1/$2"%"}'`
echo "CPU : $ACTUAL_CPU_USAGE"