Manipular arquivo texto e para gerar comandos sed.

Olá pessoal, alguém consegue ajudar?

Tenho um arquivo texto com o seguinte conteúdo (formado com 3 colunas): 1ª coluna é um caminho para um arquivo, a 2ª coluna é o nº da linha dentro do arquivo e a 3ª o conteúdo da linha.

Se o nome do arquivo se repetir, ou seja, se ele tiver mais de uma ocorrência, está em sequência e o número da linha sempre da menor para a maior.

Exemplo:

/tmp/teste1/arq1.conf:99:string 3
/tmp/teste2/arq1.conf:103:string 1
/tmp/teste2/arq1.conf:122:string qualquer
/tmp/teste2/arq1.conf:115:abracadabra teste
/tmp/teste3/arq1.conf:106:abcde
/tmp/teste3/arq1.conf:155:ola mundo
/tmp/teste4/arq1.conf:60:string qualquer 2
/tmp/teste5/arq1.conf:10:ola mundo

Reparem que podem ter mais de uma linha para o mesmo arquivo e este arquivo é gerado dinamicamente.

A partir dele, preciso gerar uma saída contendo comandos sed de alteração em cada arquivo desta lista da seguinte forma:
Se o nome do arquivo tiver somente uma ocorrência (ex. /tmp/teste1/arq1.conf, /tmp/teste4/arq1.conf e /tmp/teste5/arq1.conf) ou várias ocorrências mas sendo a última, gerar o sed para substituir o conteúdo da linha por uma string pré-definida.
Se o arquivo tiver mais ocorrência mas NÃO é a última na sequência, gerar o sed para remover a linha e este comando deve estar depois dos comandos de substituição.

Digamos que se a string de substituição for xpto, a saída deveria ser igual a:

sed -i “99s/./xpto/g" /tmp/teste1/arq1.conf
sed -i "115s/.
/xpto/g” /tmp/teste2/arq1.conf
sed -i “103d” /tmp/teste2/arq1.conf
sed -i “122d” /tmp/teste2/arq1.conf
sed -i “155s/./xpto/g" /tmp/teste3/arq1.conf
sed -i “106d” /tmp/teste3/arq1.conf
sed -i "60s/.
/xpto/g” /tmp/teste4/arq1.conf
sed -i “10s/.*/xpto/g” /tmp/teste5/arq1.conf

De preferência, se for através de awk (ou sed se possível) seria melhor ainda porque não queria loops for / while.

É uma ideia e pode ser melhorada, mas está aí o código.

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

public class SedCommandGenerator {
    public static void main(String[] args) {
        String filePath = "caminho/do/arquivo.txt";
        String replaceString = "xpto";
        Map<String, Integer> lastLineMap = new HashMap<>();
        Map<String, Boolean> multipleOccurrencesMap = new HashMap<>();

        try (BufferedReader br = new BufferedReader(new FileReader(filePath))) {
            String line;
            while ((line = br.readLine()) != null) {
                String[] splitLine = line.split(":");
                String fileName = splitLine[0];
                int lineNumber = Integer.parseInt(splitLine[1]);

                if (!lastLineMap.containsKey(fileName) || lastLineMap.get(fileName) < lineNumber) {
                    lastLineMap.put(fileName, lineNumber);
                    multipleOccurrencesMap.put(fileName, false);
                } else {
                    multipleOccurrencesMap.put(fileName, true);
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }

        for (String fileName : lastLineMap.keySet()) {
            int lastLineNumber = lastLineMap.get(fileName);
            boolean isMultipleOccurrences = multipleOccurrencesMap.get(fileName);
            String sedCommand = "sed -i ";
            if (!isMultipleOccurrences) {
                sedCommand += "\"" + lastLineNumber + "s/.*/" + replaceString + "/g\" ";
            }
            else {
                for (int i = 1; i < lastLineNumber; i++) {
                    sedCommand += "\"" + i + "d; ";
                }
                sedCommand += lastLineNumber + "s/.*/" + replaceString + "/g\" ";
            }
            sedCommand += fileName;
            System.out.println(sedCommand);
        }
    }
}