SMB не может использовать подстановку команд даты

Хорошо, давайте пошагово:

sed -n '

Опция -nзаставляет sedничего не выводить, если не указано иное

/Policy Name:/! d

Все строки, не содержащие Policy name:, удаляются. Остальная часть скрипта обрабатывается только в следующих циклах.

s/.*:\s\+//
h

При этом удаляется все до :и завершающих пробелов, а остальное помещается в буфер хранения для последующего использования.

:1
n

Это начало цикла чтения новых строк

/Active:\s*no/d

Строки с таким паттерном удалены, поэтому очевидно, что неактивные не интересны

/HW\//!b1

И теперь мы переходим к :1, если строка не содержитHW/

:2
s/.*\s\(\S*\)\s*/\1/

Начало следующего цикла, удалить все, кроме последней последовательности не -пробелов.

G
s/\n/\t/p

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

n
/^\s*$\|Include:/! b2
'

и это повторяется со следующими строками, пока мы не достигнем заданного шаблона.

Обратите внимание, что это крайне -непереносимый код, который не будет работать во многих sedверсиях.

Редактировать:Чтобы добавить тип политики в качестве третьего столбца, вы должны добавить эту строку в скрипт до или после Active:флажка:

/Policy Type:/{s/.*:\s*//;H;}

То есть :Если строка содержит указанную строку, выполните команды между {}. Эти команды удаляют часть до :и завершающие пробелы и добавляют оставшуюся часть строки (, которая должна содержать тип политики ), в буфер удержания. Таким образом, буфер хранения содержит имя и тип политики, разделенные новой строкой. Поэтому, когда мы добавим это с G, будут заменены две новые строки, поэтому команда замены должна получить флаг gдля замены всех вхождений:

s/\n/\t/gp

Сценарий AIX в основном такой же, но в нем отсутствуют расширения GNU для регулярных выражений. В основном используются переменные для сопоставления пробелов или вкладок,поскольку \tне будет работать во всех вариантах sed, а также +для «одного или нескольких» необходимо заменить на\{1,\}

0
21.05.2019, 22:29
1 ответ

Должен работать с двойными кавычками, например

smbclient //10.10.101.29/it -W WORKGROUP -U user --password pass -c "put file_$(date +%Y_%m_%d).file"

или

date=$(date +%Y_%m_%d)
smbclient //10.10.101.29/it -W WORKGROUP -U user --password pass -c "put file_${date}.file"
0
28.04.2021, 23:33

Теги

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