O comando requer o GNU sed
e parece inserir a string Dcom.sun.management.jmxremote.ssl=false
seguida por uma nova linha antes da primeira ocorrência de -jar
no final de uma linha.
Exemplo:
something
something
something-jar
something
é transformado em
something
something
somethingDcom.sun.management.jmxremote.ssl=false
-jar
something
O comando sed
lê todo o arquivo na memória executando H
para cada linha do arquivo (acrescenta a linha atual ao "espaço de espera" com um caractere de nova linha no início). Quando ele atinge a última linha ( $
), ele troca o espaço de espera pelo espaço de padrão ( x
) e exclui a primeira nova linha (ponha lá executando H
para a primeira linha do arquivo). Em seguida, ele substitui -jar\n
por Dcom.sun.management.jmxremote.ssl=false\n-jar\n
(o &
é o que foi correspondido pela expressão). Em seguida, imprime as linhas coletadas ( p
).
Outra maneira de fazer a mesma coisa com awk
:
awk 'skip==0 && sub("-jar$", "Dcom.sun.management.jmxremote.ssl=false\n-jar") { skip=1 } { print }' "$File"
Isso tenta fazer a mesma substituição em cada linha e, quando tiver êxito, define skip=1
, o que fará com que ela não tente novamente. Cada linha é impressa, independentemente de uma substituição ter ocorrido ou não.
Isso não armazena o arquivo inteiro na memória.