Регулярное выражение находит 3 или 4 числа

Для небольших заданий сценариев, где мелкомодульный доступ фс необходим, но можно было бы предпочесть стараться не иметь дело со сложной утилитой "песочницы" хинду инструментов аудита, исключительно удобно. В частности, это обеспечивает, простой способ включить и отключить доступ для записи к выбранным файлам в интерактивном режиме (для теста затем развертывают сценарии).

На хинду это доступно по умолчанию, но не должно быть слишком трудно установить на других дистрибутивах.

http://git.overlays.gentoo.org/gitweb/?p=proj/sandbox.git;a=summary

Внутренне это реализовано сверх получения по запросу механизма LD_PRELOAD в "libsandbox.so" библиотеке, которая прерывает и фильтрует вызовы файловой системы. Это также идет с аккуратной интерактивной оберткой оболочки, таким образом, единственные потребности ввести "песочницу" для заскакивания в защищенную оболочку.

Функциональность, которую особенно попросил относительно OP (поддельные записи), поддерживается: http://devmanual.gentoo.org/function-reference/sandbox-functions/index.html

2
19.05.2014, 17:45
3 ответа
[1131971]Есть много способов сделать это. Следующие команды предполагают, что каждая входная строка может иметь только одно число. Я использую этот файл в качестве теста:

sed

  • $ sed -r 's/([^0-9]*)([0-9]*)([^0-9]*)/1: "\1", 2: "\2", 3: "\3"/" файл. 1:", 2: "1844", 3: "-PAL.Bak". 1: "IMG_", 2: "1959", 3: "bak". 1: "ZER_", 2: "1940", 3: "BAK". 1: "PEN", 2: "225", 3: "bak". 1: "Слово", 2: "1943", 3: "БАК".
    perl

  • $ perl -lpe 's/([^\d]*)(\d*)([^\d])/1: "$1", 2: "$2", 3: "$3"/" файл. 1:", 2: "1844", 3: "PAL.Bak". 1: "IMG_", 2: "1959", 3:". "Пекарь". 1: "ZER_", 2: "1940", 3:". "BAK". 1: "ПЕН", 2: "225", 3:". "Пекарь". 1: "Слово", 2: "1943", 3: "БАК".
    grep

$ grep -oP '\d+' file 1844 1959 1940 225 1943

<VirtualHost 127.0.0.1:80>
  ServerName            www.example.com
  ServerAlias           example.com
  ServerAdmin           webmaster@example.com
  DocumentRoot          /internet/com/example/www
  ScriptAlias /cgi-bin/ /internet/com/example/cgi-bin
  CustomLog             /internet/com/example/logs/access.%Y-%m.log combined
  ErrorLog              /internet/com/example/logs/errors.%Y-%m.log
  <Location />
    AddOutputFilter INCLUDES .html
    Options +Includes +ExecCGI
    DirectoryIndex index.html
    ErrorDocument 404 /404.html
  </Location>
</VirtualHost>

Если у вас только один интересующий вас шаблон на линию, вы можете упростить его до

/internet/com/example/www/
/internet/com/example/logs/
/internet/com/example/cgi-bin/

или

  1. В общем случае, с регулярными выражениями, меньше - больше. Всегда следует стараться использовать простейшие регулярные выражения. Если вы не хотите перехватывать или сопоставлять не нумерованные символы, то оставьте их в регексе.[1131981]
6
27.01.2020, 21:51
[1131982] Попробуйте следующую команду GNU [1132378] grep[1132379],
  • 1
    27.01.2020, 21:51
    sed -e "s/^[^0-9]*//g" -e "s/\(^[0-9]*\)\(.*\)/\1/" <file_name>
    

    . Другой способ сделать это

    sed 's/[^0-9]*//g' <file_name>
    
    1
    27.01.2020, 21:51

    Теги

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