В следующем посте представлены точные шаги, которые необходимо предпринять для обновления Debian 8 Jessie до Debian 9 Stretch:
https://economictheoryblog.com/2018/08/23/upgrade-debian-8-to-9/
perl здесь удобен :замещающая часть s///
может быть оценена как код:
perl -pe 's/\[[^]]*@.+?\]/ ($cite = $&) =~ s{:}{}g; $cite /ge' file
выходы
[@Name2021]
[@Name2021, 10]
[@NameTitle]
[Vgl. @Name2021]
[Vgl. @Name2021, 20--30]
Если вы довольны результатом, вы можете сохранить изменения обратно в файл с помощью
perl -i -pe...
Использование GNU sed
и применение глобальной замены типа 's/regexp/replacement/g'
в -место(-i
)ко всем не -скрытым файлам в текущем каталоге:
sed -i -- 's/\(\[[^]@]*@[^]:]*\):\([^]]*\]\)/\1\2/g' *
s/
начать замену \(
открыть первую группу захвата \[
литерал соответствия[
[^]@]*
соответствует любым символам, отличным от-]
и не-@
@
буквальное соответствие@
[^]:]*
соответствует любым символам, отличным от-]
и не-:
\)
закрыть первую группу захвата :
буквальное соответствие:
\(
открыть вторую группу захвата [^]]*
соответствует любым символам, отличным от-]
\]
буквальное соответствие]
\)
закрыть вторую группу захвата /
сменный сепаратор \1\2
строка замены, содержащая захваченные группы /g
конец замены,заменить g
локально Создайте резервную копию целевого каталога перед выполнением этой команды или измените -i
на -i'.bak'
, чтобы сохранить копию оригинальные файлы с суффиксом .bak
. Используйте инструмент сравнения по вашему выбору, чтобы сравнить исходные файлы с результатом.
Если вы не хотите изменять только те строки, которые начинаются с ^
, я думаю, эта команда поможет:
sed '/^\^/!s/://' file
Использованиеperl
:
$ perl -lpe 'my($p1, $p2);
substr($_, $p1, $p2-$p1) =~ s/(@[^:]+):/$1/
while
$p1 = 1+index($_, "[", $p2)
and
$p2 = 1+index($_, "]", $p1);
' file
[
и следующего за ним ]
. Выход:
@Name2021]
[@Name2021, 10]
[@NameTitle]
[Vgl. @Name2021]
[Vgl. @Name2021, 20--30]