Рекурсивно заменить на RegEx w/grep и sed при сохранении групп захвата?

Я нашел ответ отhttps://www.reddit.com/r/bashonubuntuonwindows/comments/8fcbs5/update_of_opensuse_on_wsl_error/:вам нужно изменить URI репозитория с HTTP на HTTPS. Я только что сделал это и смог увидеть новые пакеты. У меня были только репозитории обновлений oss и oss _, поэтому процесс, которому я следовал, был:

sudo zypper rr oss
sudo zypper rr oss_update
sudo zypper ar https://download.opensuse.org/distribution/leap/42.3/repo/oss/suse/ oss
sudo zypper ar https://download.opensuse.org/update/leap/42.3/oss/ oss_update

sudo zypper ref
sudo zypper up

Чтобы убедиться, что это работает для вашей версии, найдите номер версии вашей системы и подставьте его в приведенные выше URL-адреса вместо 42.3. (Вы можете убедиться, что URL-адреса действительны, открыв их в браузере. )Вы можете увидеть номер версии в выводе следующей команды:

cat /etc/os-release

2
29.04.2020, 01:28
3 ответа

Используйте только sed, как в этом примере

echo "/*  73 */   private static int last = -1000;" | 
    sed 's#^/\*[[:blank:]]*\([0-9]*\)[[:blank:]]*\*/[[:blank:]]*\(.*\)$#\2 // JD \1#g'
private static int last = -1000; // JD 73
1
19.03.2021, 02:19

В sedзахваченные группы обозначаются с помощью \1, \2и т. д. вместо $1, $2и т. д. См. Назад _002dссылки -и -Подвыражения.html

1
19.03.2021, 02:19
  • Замените -Pна -Eв grepи используйте [[:digit:]]или [0-9]+вместо (\d+), так как вы не используете никакие другие совместимые с Perl -вещи и вам не нужен скобки
  • Удалить (.*)из grep, это лишнее
  • Добавьте -Eк sed, иначе вам придется покинуть свои группы захвата (...)и+
  • Сэд не понимает \d+, замените его на [[:digit:]]или[0-9]+
  • Замените обратные ссылки $1на \1и $2на \2
  • .
  • Я думаю, вы можете смело удалить g, JD создает только один комментарий в начале строки.

grep -Erl '/\* *[[:digit:]]+ *\*/'. |
  xargs sed -Ei 's/\/\* *([[:digit:]]+) *\*\/ (.*)/\2 \/\/ JD \1/'
4
19.03.2021, 02:19

Теги

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