como acessar um parâmetro com um # em um script bash

0

Eu tenho um script para slugify uma série de palavras e caracteres. A coisa é, quando um parâmetro de script usa um # o resto da linha depois que o # não é passado para o meu script. Como você pode acessar os argumentos depois e incluindo o símbolo #?

Exemplo:

$ make_slug this is a very long line #450

Retorna:

this-is-a-very-long-line

Os parâmetros de script do # são descartados quando estão sendo passados para o código do script. Exemplo de código:

arguments=""
for arg in "$@"
do
    echo "$arg"
    cleaned='echo $arg | sed -e 's/[^0-9A-Za-z]//g' -e '/./!d''
    arguments+=${cleaned,,}"-"
done
echo ${arguments::-1}
    
por Martlark 01.08.2016 / 03:16

1 resposta

0

Eu provavelmente não entendi sua pergunta, aqui estou supondo que você tenha um arquivo / variável contendo linhas de texto em cada um dos quais você deseja remover todo o texto do símbolo # para o final da linha. / p>

Se esse for o caso, e supondo que você não deseja esse comportamento para ocorrências com escape \# , é assim que eu faria:

sed 's/\([^\]\)#.*$//g' filename

se o texto estiver contido no arquivo filename ou, se estiver contido na variável var ,

sed 's/\([^\]\)#.*$//g' <<< "$variable"

Exemplo

Suponha que o seu arquivo filename contenha o seguinte texto

This is a line#this is a comment
this is another line without comments
this is a line with an escaped sharp symbol \# and therefore this is NOT a comment

então o comando acima gera

This is a line
this is another line without comments
this is a line with an escaped sharp symbol \# and therefore this is NOT a comment

Explicação

sed 's/\([^\]\)#.*$//g'
  • sed é um s tring ed itor: 's/matched-pattern/replaced-pattern/options' . s significa s ubstitution e a opção g para g lobal, ou seja, não pára após a primeira substituição.
  • [^\] math tudo o que é não uma barra invertida \ (que precisa ser escapada, daí o dobro \ )
  • \(pattern\) armazena o pattern correspondente e é referido com no padrão de substituição
  • .*$ corresponde a qualquer caractere 'até o final da linha
por AndreasT 01.08.2016 / 11:54