Como posso passar um parâmetro para sed?

0

Para ser mais preciso - como posso passar um parâmetro para um programa que chama sed - como posso 'passar' esse parâmetro?

Eu tenho um arquivo 'source_code.sc'.
Eu tenho um script sed "find_expect":

#n
/expect/{
=
p
}

que eu invoco de dentro de um programa que está fazendo o loop através de arquivos com

sed -f find_expect.= source_code.sc

essa impressão é encontrada com seus números de linha, como

712
      expect(it).to be_true

No entanto, essa pesquisa é codificada para pesquisar "esperar" Como posso mudar isso para que o próprio texto de pesquisa também seja passado. Eu também estou circulando através de arquivos com o find, então o sed é atualmente invocado para muitos arquivos. Por exemplo, para procurar por 'blob', o programa em loop através de arquivos o invocaria com

sed -f find_expect.= "$file_from_loop" source_code.sc 'blob'
# with 'blob' being passed in from the main script
# which would be invoked with './change_all.sh 'blob'
# I don't pass the file pattern in to this main call as I just
# recursively do all files (that match a pattern) from the current directory down
    
por Michael Durrant 14.11.2013 / 17:52

1 resposta

2

Parece que você está tentando reimplantar o grep . Em vez de sed , use:

grep -n -- "$var" file

Se var contiver metacaracteres de expressão regular que você deseja corresponder literalmente, forneça a opção -F para grep :

grep -nF -- "$var" file

onde var contém seu padrão desejado.

Na página grep(1) man:

-n, --line-number
Prefix each line of output with the 1-based line number within its input file. (-n is specified by POSIX.)

Se você insistir em usar sed , poderá fazer uma função para essa finalidade:

notgrep (){
    if [ $# -ne 2 ];then
        echo "Usage: notgrep <pattern> <file>"
        exit 1
    end
    sed -n "/$1/{
        =
        p
    }" "$2"
}
    
por 14.11.2013 / 18:16