Isso realmente não tem nada a ver com precedência (que geralmente é algo relacionado a operadores), mas com a ordem na qual os comandos estão sendo emitidos.
Veja o primeiro exemplo na pergunta:
N
s/System\nAdministrator/Desktop\nUser/
s/System Administrator/Desktop User/
Isto irá ler as linhas aos pares e aplicar as duas substituições nelas. Se a segunda linha do par terminar com System
(com Administrator
no seguinte, terceiro, linha), ele não conseguirá detectar isso. Isso significa que a string, quando estiver sobre uma linha ímpar e outra, não será substituída .
Veja o segundo exemplo na pergunta (com a ortografia corrigida):
s/System Administrator/Desktop User/
N
s/System\nAdministrator/Desktop\nUser/
Isso alterará a string na linha atual, lerá a próxima linha e alterará a string com uma nova linha no meio. Isto não irá alterar as linhas ímpares com uma cópia completa da cadeia (ou linhas ímpares com apenas System
).
Usando o GNU sed
:
:top
N
$s/System\(.\)Administrator/DesktopUser/g
b top
Este script faz um loop e lê todas as linhas do arquivo no espaço padrão. Uma vez que ele atinge a última linha de entrada, ele realiza a substituição globalmente, enquanto permite qualquer caractere entre as duas palavras (também pode usar \([ \n]\)
) em vez de \(.\)
).
O resultado será
The first meeting of the Linux Desktop
User's group will be held on Tuesday.
Another line
And here we have: Desktop User's Group as well.
1.Desktop User's group.
2.Desktop Users Group.
3.Desktop Users Group.
The first meeting of the Linux Desktop
User's group will be held on Tuesday.
Desktop Users Group.