OpenSSH 6.2
представленный несколько методов аутентификации.
Для ссылок см. sshd_config (5).
:%s/match\$\zs\(\w\+\)\(.*match\$\)xxx/\1\2\1/
Соответствие \ $ \ ZS
: закрепляйте матч в первом сопоставление $
; Я использую \ ZS \ ZS
, чтобы запустить совпадение после этого, чтобы избежать еще одной группы захвата
\ (\ W \ + \)
: захватить текст после первого вхождения совпадение $
\ (. * Match \ $ \)
: захватить то, что после этого, до второго возникновения соответствует $
, и захватить, что, как мы хотим сохранить его XXX
: соответствует замену замена : текст после первого вхождения, затем текст между ними, затем первый текст снова (замена xxx
).
:%s/\v(match\$(\w+).*match\$)xxx/\1\2/
Использование Баш
: Массивы
pa=("/home/user/folder1" "/home/user/fol der2")
find "${pa[@]}" -name '*xy*' ...
Соблюдайте, что \
не делает то, что можно надеть:
$ pa="/home/user/folder1 /home/user/fol\ der2"
$ printf '%s\n' $pa
/home/user/folder1
/home/user/fol\
der2
\
в Определение PA
становится буквальным символом в строке, а не побег. Если вы хотите список отдельных строк, используйте массив.
Попробуйте это:
sed -e 's/\(match\$\)\([a-zA-Z_]\+\)\([a-zA-Z ]\+match\$\)[a-zA-Z]\+/\1\2\3\2/' < input.txt > output.txt
Использование ввода input.txt
:
text match$something_here and match$xxx blablabla
text match$something_else_here and match$xxx blablabla
Я получаю output.txt
:
text match$something_here and match$something_here blablabla
text match$something_else_here and match$something_else_here blablabla
sed -e 's/\(match\)\([_[:alnum:]]*\)\(\(.*\)\n\)*/\1\
/2;tc' -e b -e :c -e 's//\1\2\4\2/'
Вышеупомянутая последовательность всегда будет обрабатывать только первое и второе вхождения match
в строку - независимо от того, сколько их может быть на линия.
Он работает, выполняя первую замену s ///
на s /// 2
cd вхождении шаблона, тогда, если подстановка t
успешен, b
ранжируется до : c
ontinue лейбла, или, если нет, b
выходит за пределы сценария.
Таким образом, когда есть второе совпадение шаблона, шаблон повторяется для команды 2cd s ///
ubstitution. Но когда его нет, строки печатаются как обычно.
Важным моментом является подвыражение \ (\ (. * \) \ N \) *
. Подвыражение соответствует только нулевой строке для первой команды s /// 2
, потому что в результате \ n
ewline может встречаться только в пространстве шаблонов sed
редактирования. Но когда шаблон повторяется, \ (\ (. * \) \ N \) *
соответствует любому / всем символам, встречающимся между двумя совпадениями
, потому что предыдущие s ///
ubstitution вставил \ n
ewline при замене [_ [: alnum:]] *
. Таким образом, один и тот же повторяющийся шаблон может означать две разные вещи в зависимости от его контекста в сценарии.
Хотя приведенная выше версия должна работать так, как написано для любого POSIX sed
(акцент на должен - многие sed
не работают) соответствуют стандартам повторяющихся подвыражений) , w / GNU sed
, вы можете написать его немного короче:
sed -E 's/(match)(\w*)((.*)\n)*/\1\n/2;T;s//\1\2\4\2/
' <<\IN
text match_something_here and !m!atch_xxx blablabla
text match_something_here and match_xxx blablabla
text match_something_else_here and match_xxx blablabla
text match_something_here and match_xxx blablabla match_xxx blablabla
text match_something_else_here and match_xxx blablabla match_xxx blablabla match_xxx blablabla
IN
... От << \ IN
до IN Бит
- это просто ввод в документ, поэтому я могу продемонстрировать, как он работает - вы, вероятно, должны использовать вместо него
$ something
и $ xxx
на _something
и _xxx
, потому что, насколько я понимаю, эти знаки доллара должны фактически не будет включен в шаблон замены, но будет заменен чем-то другим. Если это правда, то вы можете оставить там escape-символ \ w *
ord или, если вы хотите, чтобы были включены буквальные знаки доллара, вы все равно должны определить свой собственный класс символов и добавить его, например: [ $ _ [: alnum:]] *
.
Обратите внимание, что tc '-e b -e: c -e
сокращается до - с GNU sed
- просто T
.В то время как переносимость t
est привела к успешной подстановке b
, проходящей через точку, в которой неудачные строки b
разошлись, на GNU sed
you can T
est для неудачных результатов - что напрямую разветвляет их, и единственные оставшиеся строки, все еще выполняющие скрипт в этот момент, - это те, которые действительно успешно заменили вторую пару совпадений на ] \ n
ewline.
В любом случае (в зависимости от sed
) любой из вышеперечисленных напечатает:
text match_something_here and !m!atch_xxx blablabla
text match_something_here and match_something_here blablabla
text match_something_else_here and match_something_else_here blablabla
text match_something_here and match_something_here blablabla match_xxx blablabla
text match_something_else_here and match_something_else_here blablabla match_xxx blablabla match_xxx blablabla