sed -найти и заменить шаблон, но исключить определенную числовую последовательность

Проблема решена!

enter image description here

topпоказывает на -ядро ​​загрузку ЦП, поэтому сумма процентов будет больше 100.

В то время как gnome-system-monitorможет отображать как на -ядро ​​, так и на -ЦП . На самом деле есть опция (, подчеркнутая на скриншоте выше ), которая может изменить поведение.


Системы (обычно )имеют 1 ЦП с несколькими ядрами.
В моем случае у меня 1 процессор с 4 ядрами. На снимке экрана показана утилита нагрузки ЦП (stress), работающая только на одном ядре --, одно ядро ​​занято. Как видите, topпоказывает процесс stressна 100 % и другие процессы, то есть сумма будет больше 100. С другой стороны,gnome-system-monitorс включенной подчеркнутой опцией показывает то же самое stressобрабатывает на 25% (ровно одну четвертую часть topиспользования ).

0
17.04.2020, 14:50
2 ответа

sed не имеет опережающих выражений, которые позволили бы вам красиво пропустить 7777. Но вы могли бы сделать это неуклюже, переместив все совпадения 7777 «в сторону» к какой-то строке, в которой вы уверены, что она нигде не встречается во входных данных..

Например, если вы знаете, что #7 #7 #7 #7 #не встречается во входных данных, вы можете использовать:

echo "1234 The few, 7777 the brave." | \
sed -e 's/7777/#7#7#7#7#/g' -e 's/[0-9]\{4\}/(&)/g' -e 's/#7#7#7#7#/7777/g'

чтобы получить

(1234) The few, 7777 the brave.

3
19.03.2021, 02:28

В качестве альтернативы:

echo "1234 The few, 7777 the brave." | sed -e 's/\([0-9]\{4\}\)/(\1)/g' -e 's/(\(7\{4\}\))/\1/g'
(1234) The few, 7777 the brave.

echo "A 1717 B 7777 C 7676 D" | sed -e 's/\([0-9]\{4\}\)/(\1)/g' -e 's/(\(7\{4\}\))/\1/g'
A (1717) B 7777 C (7676) D

echo "7777 foo 1234 bar" | sed -e 's/\([0-9]\{4\}\)/(\1)/g' -e 's/(\(7\{4\}\))/\1/g'
7777 foo (1234) bar
1
19.03.2021, 02:28

Теги

Похожие вопросы