sed o comando na função de script não está funcionando?

0

Eu tenho uma linha de comando sed que substitui o ASCII 1 por | :

sed -e 's/^A/\|/g' file_name

e isso funciona. No entanto, quando eu colocá-lo em uma função no meu arquivo bash:

func(){
    sed -e 's/^A/\|/g'
}

não funciona:

func file_name

apenas trava, em vez de exibir o arquivo.

Eu cometi um erro? Eu abri um novo terminal para que meu bash fosse definitivamente carregado.

    
por user997112 16.11.2017 / 11:57

2 respostas

2

Você tem que processar file_name como um parâmetro de entrada que não é aplicado apenas magicamente aos comandos da função ...

func() {
    sed -e 's/^A/\|/g' "$1"
}

O primeiro parâmetro passado é armazenado em $1 , o segundo em $2 e assim por diante.

Isso funcionaria com sua versão, BTW: func < file_name

    
por 16.11.2017 / 12:07
2

Na verdade, não trava. Aguarda a entrada: -)

Ou você faz isso

func() # replace something in the file, i.e. modify it
{
    sed -e 's/^A/\|/g' -i "$1"
}

ou isto

func() # output the contents of the file to console after applying sed
{
    sed -e 's/^A/\|/g' < "$1"
}

Além disso, o shell bash / POSIX não é C.

    
por 16.11.2017 / 12:09