Não é possível substituir String durante a leitura do arquivo

1

O final.txt se parece com:

build/create_changes.sh
build/create_changes.sh-meta.xml
src/aura/camping/camping.design
src/aura/camping/camping.design-meta.xml

E o código é assim:

if [ -e final.txt ]
then
    ARRAY=()
    while read CFILE
    do
        echo Analyzing file 'basename $CFILE'
        case "$CFILE"
            in
            *.design) TYPENAME="AuraDefinitionBundle";;
            *) TYPENAME="UNKNOWN";;
        esac

        if [ "$TYPENAME" == "AuraDefinitionBundle" ]
        then
            if [ $(contains "${ARRAY[@]}" $(basename -- "$(dirname -- "$CFILE")")) != "y" ]
            then
                echo baseFile from new method cFile $CFILE
                CFILENAME="$CFILE"

                replace="src/aura/"$(basename -- "$(dirname -- "$CFILE")")
                echo checkChanges "${CFILENAME/$CFILENAME/"$replace"}"
                CFILE="${CFILENAME/$CFILENAME/"$replace"}"
                echo baseFile from after change method cFile $CFILE
            else
                continue
            fi
        fi
    done < final.txt
else
    echo Change file not found!

Eu posso ver na janela de eco como:

 [exec] baseFile from new method cFile src/aura/camping/camping.design
 [exec] checkChanges src/aura/camping
 [exec] baseFile from after change method cFile src/aura/camping

mas o arquivo não muda, até adicionei o comando sed , mas a saída não muda:

if [ $(contains "${ARRAY[@]}" $(basename -- "$(dirname -- "$CFILE")")) != "y" ]
then
    CFILENAME="$CFILE"
    ARRAY+=($(basename -- "$(dirname -- "$CFILE")"))
    replace="src/aura/"$(basename -- "$(dirname -- "$CFILE")")
    #CFILE="${CFILENAME/$CFILENAME/"$replace"}"
    sed -i 's/$CFILENAME/$replace/' final.txt
else
    continue
fi

Entradas esperadas

build/create_changes.sh
build/create_changes.sh-meta.xml
src/aura/camping/camping.design
src/aura/camping/camping.design-meta.xml

Saída esperada

build/create_changes.sh
build/create_changes.sh-meta.xml
src/aura/camping
src/aura/camping/camping.design-meta.xml
    
por Nagendra K S 21.09.2018 / 08:22

2 respostas

0

Não tenho certeza se posso seguir suas lógicas, mas isso

awk '/\.design$/ {sub("/[^/]*$", "")} 1 ' file
build/create_changes.sh
build/create_changes.sh-meta.xml
src/aura/camping
src/aura/camping/camping.design-meta.xml

produziria a saída desejada ...

    
por 21.09.2018 / 13:59
0

Se você quiser apenas excluir o nome da base de todos os nomes de caminhos que terminam em .design :

sed 's#/[^/]*\.design$##' final.txt

Para fazer uma edição no local, use sed -i com a expressão acima (há pequenas variações de como o -i flag funciona, mas isso funcionaria com o GNU sed , por exemplo).

A expressão regular /[^/]*\.design$ corresponde a / seguido por qualquer número de caracteres que não sejam / e a string literal .design no final de uma linha.

    
por 21.09.2018 / 14:11