Как работает замена 3-го на последнее вхождение с помощью команды SED?

Как работает замена 3-го на последнее вхождение с помощью команды SED?

28.01.2020 02:47:04 Просмотров 34 Источник

Давайте рассмотрим ' файл.txt', Щелкните для содержимого файла

Я хочу заменить 3-е на последнее вхождение "Р".

sed -E 's/(.*)p((.*p){2})/\1@\2/' file.txt

Здесь "p" заменяется на"@". Я хочу знать, как это работает. Кто-нибудь может мне объяснить ?

У вопроса есть решение - Посмотреть?

Ответы - Как работает замена 3-го на последнее вхождение с помощью команды SED? / How the Substitution of the 3rd to the last occurrence using SED command works?

Является ответом!
KamilCuk

28.01.2020 03:00:50

  • sed
  • -E - использовать расширенные регулярные выражения. Совместим с GNU и BSD sed.
  • '-замена
    • s - сепаратор
    • p- начало первой группы
    • ) - матч ничего.
    • .*- конец первой группы.
    • )-матч ) Фактически, первая группа будет содержать все символы от строки до ).
    • pначало второй группы.
    • pначало третьей группы. Обратите внимание на порядок.
    • (сопоставьте что-либо до )...
    • ) ... двукратный. Таким образом, это позволит убедиться{2}p.
    • )закрыть вторую группу. Таким образом, вторая группа будет содержать что-то , ), что-то и ).
    • s сепаратор. Далее идет замена.
    • p-Обратная связь с первой группой. Так подставляется весь символ от начала строки до первого )без ).
    • p- а @
    • @-обратная связь со второй группой. Так подставляется для всех знаков после первого \2без него, второй p, что-то между вторым и третьим \2и третьим p
    • s сепаратор
  • /означает то же '

https://stackoverflow.com/questions/59948085/how-the-substitution-of-the-3rd-to-the-last-occurrence-using-sed-command-works/59948324#comment106016426_59948324
Большой минусами!
https://stackoverflow.com/questions/59948085/how-the-substitution-of-the-3rd-to-the-last-occurrence-using-sed-command-works/59948324#comment106016690_59948324
спасибо за ответ, но я все еще в замешательстве.
https://stackoverflow.com/questions/59948085/how-the-substitution-of-the-3rd-to-the-last-occurrence-using-sed-command-works/59948324#comment106016920_59948324
рассмотрим строку 4
https://stackoverflow.com/questions/59948085/how-the-substitution-of-the-3rd-to-the-last-occurrence-using-sed-command-works/59948324#comment106017008_59948324
по вашим словам первая группа "(.* ) "означает все символы, начинающиеся со строки, за которой следует буква "Р". Итак, на этом 1-я группа заканчивается. До сих пор понимал, но после этого не могу понять.
https://stackoverflow.com/questions/59948085/how-the-substitution-of-the-3rd-to-the-last-occurrence-using-sed-command-works/59948324#comment106017082_59948324
смущен по поводу ((.* p) {2}).
https://stackoverflow.com/questions/59948085/how-the-substitution-of-the-3rd-to-the-last-occurrence-using-sed-command-works/59948324#comment106019425_59948324
( .. )используется для "запоминания" всего, что находится внутри. (.*p){2}равно .*p.*p. Тот самый .соответствует любому персонажу. *Соответствует нулю или большему числу вхождений предыдущего паттерна. Тот самый .*соответствует любому символу ноль или более раз. Вы можете найти много, много, много, много ресурсов в интернете, которые пытаются объяснить регулярные выражения. Я рекомендую кроссворды, они удивительные и забавные.
Закрыть X