Usando sed com uma variável inteira [duplicada]

2

Eu quero sed usando uma variável.

Por exemplo, sed -n '1,10p' file . Então, ao invés de 10 , eu quero usar $k onde k é um inteiro.

    
por Ea Saad 16.08.2018 / 02:33

2 respostas

2

Antecedentes

sed não pode expandir as variáveis shell ou ambiente. Em vez disso, você precisa selecionar aspas que permitem que o shell, Bash, faça a expansão. Quando eles são colocados entre aspas duplas, o Bash expandirá variáveis dentro, mas não quando elas estiverem entre aspas simples. Para usar aspas simples, você precisa fazer algo assim:

$ sed -n '1,'$k'p' file

AVISO: Acima, nós expusemos a variável $k para que não fique entre aspas dos argumentos sendo passados para sed . Ao fazer isso, o shell, Bash, expandirá $k para qualquer valor definido.

Se você usar aspas duplas, poderá usar a notação ${var} para proteger a variável entre aspas duplas, para que o shell a expanda. Abaixo a notação ${k} é necessária porque senão o nome da variável $k seria seguido pelo p , levando o shell Bash a pensar que o nome da variável é $kp .

$ sed -n "1,${k}p" file

Você também pode fazer o acima, colocando um espaço entre a variável, $k e o p . Isso funciona porque a sintaxe sed permite espaços em branco entre um endereço e um comando (em outras palavras, o espaço é passado para o sed com esse formulário, diferente de ${k} ).

$ sed -n "1,$k p" file

OBSERVAÇÃO: você precisa usar um pouco de cautela com esses métodos, pois eles falharão se $k não estiver definido:

$ printf "blah %d\n" $(seq 10) |  sed -n '1,'$k'p'
sed: -e expression #1, char 3: unexpected ','

Exemplo

Aqui está a variante ${k} com cotação dupla como exemplo:

$ k="3"; printf "blah %d\n" $(seq 10) |  sed -n "1,${k}p"
blah 1
blah 2
blah 3

shell vs. variáveis de ambiente

Para saber mais sobre esse assunto, recomendo que você leia este documento Q & A intitulado: Qual é a diferença? em uso entre variáveis de shell e variáveis de ambiente? .

Referências

por 16.08.2018 / 03:23
0

Tente isso,

  sed -n '1,'$k'p' file

Dentro de uma simples citação, tudo é preservado literalmente, sem exceção.

Assim, podemos negar isso adicionando aspas simples ao redor da variável.

    
por 16.08.2018 / 02:51

Tags