Удалить определенный символ в шаблоне текста

В следующем посте представлены точные шаги, которые необходимо предпринять для обновления Debian 8 Jessie до Debian 9 Stretch:

https://economictheoryblog.com/2018/08/23/upgrade-debian-8-to-9/

0
10.01.2021, 23:03
4 ответа

perl здесь удобен :замещающая часть s///может быть оценена как код:

perl -pe 's/\[[^]]*@.+?\]/ ($cite = $&) =~ s{:}{}g; $cite /ge' file

выходы

[@Name2021]
[@Name2021, 10]
[@NameTitle]
[Vgl. @Name2021]
[Vgl. @Name2021, 20--30]

Если вы довольны результатом, вы можете сохранить изменения обратно в файл с помощью

perl -i -pe...
1
18.03.2021, 22:37

Использование GNU sedи применение глобальной замены типа 's/regexp/replacement/g'в -место(-i)ко всем не -скрытым файлам в текущем каталоге:

sed -i -- 's/\(\[[^]@]*@[^]:]*\):\([^]]*\]\)/\1\2/g' *
  • s/начать замену
  • \(открыть первую группу захвата
    • \[литерал соответствия[
    • [^]@]*соответствует любым символам, отличным от-]и не-@
    • @буквальное соответствие@
    • [^]:]*соответствует любым символам, отличным от-]и не-:
  • \)закрыть первую группу захвата
  • :буквальное соответствие:
  • \(открыть вторую группу захвата
    • [^]]*соответствует любым символам, отличным от-]
    • \]буквальное соответствие]
  • \)закрыть вторую группу захвата
  • /сменный сепаратор
  • \1\2строка замены, содержащая захваченные группы
  • /gконец замены,заменить gлокально

Создайте резервную копию целевого каталога перед выполнением этой команды или измените -iна -i'.bak', чтобы сохранить копию оригинальные файлы с суффиксом .bak. Используйте инструмент сравнения по вашему выбору, чтобы сравнить исходные файлы с результатом.

1
18.03.2021, 22:37

Если вы не хотите изменять только те строки, которые начинаются с ^, я думаю, эта команда поможет:

sed '/^\^/!s/://' file
0
18.03.2021, 22:37

Использованиеperl:

$ perl -lpe 'my($p1, $p2);
    substr($_, $p1, $p2-$p1) =~ s/(@[^:]+):/$1/
      while
        $p1 = 1+index($_, "[", $p2)
                 and
        $p2 = 1+index($_, "]", $p1);
' file
  • $p1/$p2 — это позиции [и следующего за ним ].
  • substr ()затем передается начало фрагмента + длина фрагмента, и команда s/// работает с этим фрагментом, и текущая запись $ _также обновляется.

Выход:

@Name2021]
[@Name2021, 10]
[@NameTitle]
[Vgl. @Name2021]
[Vgl. @Name2021, 20--30]
0
18.03.2021, 22:37

Теги

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