найдите определенный строковый шаблон из файла в Unix Сценариями Shell

Скопировать файлы, которым меньше 30 минут (но не перезаписывать файлы):

find /nmt/ -cmin -30 -type f -exec cp -pn '{}' /home/pi/box/street_pictures/ \;

Затем удалить файлы в /home/pi/box/street_pictures, которые старше 30 минут

find /home/pi/box/street_pictures -cmin +30 -type f -exec rm '{}' \;

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

1
21.10.2014, 19:16
2 ответа

Если вы знаете о наличии : символ на вашем входе, вы можете сделать что-то вроде этого.

echo " <j.2:Taxo_Version rdf:resource="refmat:taxonomies-8.2.0"/>" | 
awk -F\: '{print $4}' | sed 's/..$//'

Команда AWK Печатает строку 4 Th после разделителя : , и команда SED используется для удаления последних 2 символы, чтобы получить желаемый выход.

Однако, если этот метод работает или не зависит от вашего ввода, как Terdon указывает в его комментарии .

Редактировать

Окончательная труба до SED может быть вполне может избежать, если мы используем решение, которое предложено Jasonwryan в комментариев . Итак, команда будет эффективно перефразирована как,

 echo " <j.2:Taxo_Version rdf:resource="refmat:taxonomies-8.2.0"/>" | 
 awk -F: '{sub(/\/>/,""); print $4}'

Другое решение, просто использующее сокращение и редкость, может быть оформлена как,

echo " <j.2:Taxo_Version rdf:resource="refmat:taxonomies-8.2.0"/>" | 
cut -d ':' -f4 | rev | cut -c 3- | rev

снова, указавая разделитель зависит от входного файла и из примера, который вы предоставили символы, которые я Необходимость извлечения происходит после 4 th положения разделителя. Я использую Cut , чтобы извлечь подстроку после этого 4 Th разделитель и используйте подробную технику Rev , чтобы изменить строку и удалить последние 3 символа и снова применить Rev на нем, чтобы получить фактическую строку.

1
27.01.2020, 23:37

$ HOME / .vnc / xstartup предназначен для рабочего стола X на сервере, а не для самого сервера. Вам нужно создать $ HOME / .VNCRC файл с:

$geometry = "1400x850";

в нем. У вас есть какая-то документация в:

/usr/share/doc/vnc4server/examples/vnc.conf.gz
-121--102930-

Одним из способов - использовать опцию GREP -O , в сочетании со питанием PCRES ( -P ):

   -o, --only-matching
          Print  only  the  matched  (non-empty) parts of a matching line,
          with each such part on a separate output line.
   -P, --perl-regexp
          Interpret  PATTERN  as  a  Perl  regular  expression  (PCRE, see
          below).  This is highly experimental and grep  -P  may  warn  of
          unimplemented features.

Итак, вы можете сделать

 unzip -p GLP.K4C.S06F5.BG57218-rdf.zip | grep -oP ':\Ktaxonomies-[^"]*' | head -1

 unzip -p GLP.K4C.S06F5.BG57218-rdf.zip | grep -oP ':\Ktaxonomies-[^"]*' | head -1

. \ k приводит к тому, что что-то соответствует точке, которое будет игнорироваться (так что : не Напечатаны) и [^ "] *" означает «совпадение как можно больше не- » символов.

Другие варианты включают в себя:

  1. SED

     unzip-plp.k4c.s06f5.bg57218-rdf.zip |
      Sed -n 'S / .*: \ (таксономии - [^ "] * \). * / \ 1 / p' | Голова -1
     

    -N вызывает SED , чтобы ничего не напечатали, если явно не сказано и /// - оператор замещения. Он заменит все на линии со стороны линии между скобками ( \ 1 ). P вызывает напечатанную результирующуюся строку.

  2. Perl

     unzip -p glp.k4c.s06f5.bg57218-rdf.zip |
      Perl -lne 'S /* :( таксономии - [^ "]). * / $ 1 / && print' | head -1
     

    Такая же основная идея, как SED . Если замена была успешной, линия напечатана. Альтернативой будет

     unzip -p glp.k4c.s06f5.bg57218-rdf.zip |
      Perl -lne '/.*:(taxoonomies-[^"])/ && Печать $ 1' | Голова -1
     
1
27.01.2020, 23:37

Теги

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