Как найти слово после того, как данное использование шаблона сократило?

find directoryname -type f -exec grep -l {} {} \;

Это говорит найти для поиска простых файлов (т.е. исключая каталоги, устройства, символические ссылки и т.д.) и для каждого найденного файла выполнить grep с заданными параметрами. -l поручает grep просто показать имя файла, а не совпадающую строку. {} означает имя файла, \; отменяет команду.

Конечно, вы, вероятно, имели в виду, что нужно искать само имя файла, а не путь. Это означает, что часть каталога должна быть удалена из первой части {}. Одним из решений может быть:

find directoryname -type f -exec sh -c 'grep -l $(basename {}) {}' \;

Для каждого файла теперь запускается оболочка, так как подстановка параметров с $( ... ) должна быть выполнена. basenamestrips off any leading directory part.

Обратите внимание, что необходимо использовать одинарные кавычки, иначе $( ... ) часть будет вычислена при вводе команды, а не при запуске оболочки с помощью find.

0
31.03.2015, 23:15
3 ответа

Я бы использовал awk для этого

awk '/^-config2/ {print $2}' file

, он печатает второй аргумент строк, начиная с -Config2 . ^ означает начало линии.

2
28.01.2020, 02:17

Попробуйте это:

perl -ne 'if (/-config2\s*(.*)/) { print "$1\n"; }'

Это ищет линии, соответствующие -config2, а затем печатает остальную часть строка (\s*) соответствует произвольному количеству белого пробела, (.*). совпадает с чем угодно и привязывает его к $1 ).

Мой предыдущий ответ, в котором предполагалось, что за -config2 следует a единственное слово:

perl -ne 'if (/-config2\s*(\S+)/) { print "$1\n"; }'

Это ищет строки, соответствующие -config2, а затем выводит на печать первые токен после него (\s* совпадает с произвольным количеством пробела, (\S+) совпадает с непустой последовательностью не белых символов и связывает ее с $1).

2
28.01.2020, 02:17

можно настроить NAT для каждого гостя в частной сети. Во-первых, необходимо прекратить объединение всех сетевых интерфейсов (в конце концов, если они все находятся на одном коммутаторе, они едва ли находятся в собственных частных сетях).

Затем вы наборами правила NAT, и может это сработает. Но, наверное, нет - исходящий путь должен работать, а обратный - это проблема. Механизм NAT получает ответный пакет, NAT возвращает его источнику 192.168.0.2 (или что угодно). Затем он передает его маршруту... который посылает его куда? Все гости имеют один и тот же IP-адрес, все их интерфейсы имеют одинаковый адрес/маску подсети.

Поэтому нам нужно исправить маршрутизацию. К счастью, это выполнимо, с маршрутизацией политики.

При добавлении правил -t mangle для каждого гостя (на основе исходного порта, например, vnet0 или любого другого) можно отметить соединения. Затем можно направить ответ обратно (используя ip rule ) на основе этой метки.

Это большая конфигурация, но как только она заработает, ее можно будет создать. Наверное, получится. Я не проверял его. Будь то вменяемо или нет, ну... Я бы попытался заставить DHCP работать правильно лично. Подумайте о следующем человеке, которому придется управлять этим человеком (который вполне может быть вами через несколько месяцев после того, как вы точно забыли, как это работает)

-121--128788-

Это проблема языкового стандарта. watch использует strtod (3) , зависящий от языка, для преобразования аргумента в -n в double .

Чтобы устранить проблему, необходимо либо указать аргумент -n с другим разделителем:

watch -n 0,1 w

Или измените языковой стандарт на настройку, в котором символ точки используется для десятичной запятой:

export LC_NUMERIC=en_US.UTF-8
watch -n 0.1 w


Несколько ссылок:

  1. Релевантная часть Linux manpage для strtod :

Десятичное число состоит из непустой последовательности десятичных цифр, возможно содержащей символ radix (десятичная точка, зависит от языка, обычно '.')

  1. Можно просмотреть текущие настройки, запустив языковой стандарт на терминале:

     языковой стандарт
    LANG = en _ US.UTF-8
    LC_CTYPE="en_US.UTF-8 "
    LC_NUMERIC="en_US.UTF-8 "
    LC_TIME="en_US.UTF-8 "
    LC_COLLATE="en_US.UTF-8 "
    LC_MONETARY="en_US.UTF-8 "
    ...
    
  2. Исходный код можно просмотреть по адресу gitlab:

    https://gitlab.com/procps-ng/procps/blob/85fff468fa263cdd2ff1c0144579527c32333695/watch.c#L625

    https://gitlab.com/procps-ng/procps/blob/85fff468fa263cdd2ff1c0144579527c32333695/lib/strutils.c#L49

(изменить 2017-09-07): обновленные ссылки gitlab

-121--58537-

Вариант с sed:

sed -n 's/^-config2 //p' file

-n подавить автоматическую печать

s/^ -config2// заменить -config2 и заднее пространство на линии начать с ничего в образец пробел

p print образца пробел

1
28.01.2020, 02:17

Теги

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