Grep для числа, исключая его часть с плавающей запятой

Нет, нет, нет и нет:

Я объясню для uid (это то же самое для gid). Процесс может перемещать идентификатор между действующим, реальным и другим. Процесс также может произвольно устанавливать идентификатор тогда и только тогда, когда он имеет возможность CAP_SETUID.

Давайте посмотрим, как реализованы UID и GID:

Оба числа хранятся в таблице базы данных (файл), обе эти таблицы независимы. У меня есть UID и основной GID. Оба позвонили Ричарду, но с разными номерами. Единственные соединения: в / etc / passwd перечислено имя пользователя, UID и основной GID. В / etc / group перечислено имя группы, GID, UID.

В большинстве случаев эти отношения не проверяются, за исключением: при входе в систему и при вызове setgid (я думаю).

Для эффективности проверяется только то, что необходимо.

  • Процесс может перемещать ID между действующим, реальным и другим (файл, сохраненный).
  • Процесс также может произвольно устанавливать идентификатор тогда и только тогда, когда он имеет возможность CAP_SETUID.

-

На странице руководства для setreuid () ,

setreuid () устанавливает реальные и эффективные идентификаторы пользователей вызывающего процесса.

Предоставление значения -1 для реального или эффективного идентификатора пользователя заставляет систему оставить этот идентификатор без изменений.

Непривилегированные процессы могут устанавливать только эффективный идентификатор пользователя, равный реальному идентификатору пользователя, эффективному идентификатору пользователя или сохраненному установленному идентификатору пользователя.

Непривилегированные пользователи могут устанавливать только реальный идентификатор пользователя на реальный идентификатор пользователя или эффективный идентификатор пользователя.

Если установлен реальный идентификатор пользователя или эффективный идентификатор пользователя установлен на значение, не равное предыдущему реальному идентификатору пользователя, сохраненный идентификатор установленного пользователя будет установлен на новый эффективный идентификатор пользователя.

Совершенно аналогично setregid () устанавливает реальные и эффективные идентификаторы группы вызывающего процесса, и все вышеперечисленное выполняется с «группой» вместо «пользователя».

2
14.04.2017, 02:00
3 ответа

Приведенное ниже регулярное выражение будет соответствовать любому числу с плавающей запятой в формате [0-9].[0-9]и вернет целую часть этого числа с плавающей запятой.

$ a="scalar TestDmaMac4.sink.udpApp[0] throughput:last 11730.559888477"
$ egrep -o '[0-9]+[.][0-9]' <<<"$a" |egrep -o '[0-9]+[^.]'  #First grep will isolate the floating number, second grep will isolate the int part.
11730
$ perl -pe 's/(.*?)([0-9]+)(\.[0-9]+.*)/\2/' <<<"$a"  #using the lazy operator ?
11730
$ sed -r 's/(.*[^0-9.])([0-9]+)(\.[0-9]+.*)/\2/' <<<"$a"  #sed does not have lazy operator thus we simulate this with negation
11730

Ради тестирования я также попробовал регулярное выражение выше в другой строке с плавающим числом в другой позиции без начального пробела:

$ c="scalar throughput:last11730.559888477 TestDmaMac4.sink.udpApp[0]"
$ egrep -o '[0-9]+[.][0-9]' <<<"$c" |egrep -o '[0-9]+[^.]'
11730
$ perl -pe 's/(.*?)([0-9]+)(\.[0-9]+.*)/\2/' <<<"$c"
11730
$ sed -r 's/(.*[^0-9.])([0-9]+)(\.[0-9]+.*)/\2/' <<<"$c"
11730
0
27.01.2020, 23:10
l='scalar TestDmaMac4.sink.udpApp[0]   throughput:last     11730.559888477'
read -r -a a <<<"$l"
dc -e "${a[-1]}dX10r^dsa*la/p"

echo "$l" | perl -lane 'print/\d+(?=\.\d+$)/g'

результат

11730
0
27.01.2020, 23:10

Использование Grep:

grep -o " [0-9]\{1,\}"

Для тестирования:

echo "scalar TestDmaMac4.sink.udpApp[0] throughput:last 11730.559888477" | grep -o " [0-9]\{1,\}"

результаты:

11730
-2
27.01.2020, 23:10

Теги

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