Copie tipos específicos de caracteres usando sed

1

Usando sed (ou grep se o sed não suporta funções), estou pesquisando como copiar apenas letras, pontos (.), espaços e números em uma linha específica de arquivo de texto e enviar a saída sed para um var; Eu não quero cortar parte do texto.

Eu quero que o sed leia apenas a linha especificada do arquivo de texto e copie apenas os símbolos a-z, A-Z, 0-9 e ".".

Ao navegar em várias páginas da web e na página do GNU man do SED: link

Estou tentando fazer isso com este comando:

NAME1=$(sed -n '1p' -e 's/.*\[:alpha:digit:blank:punct:]/'/p'' txtfile)

Mas eu recebo uma mensagem de erro não muito clara:

test.sh: 1: [: sed: unexpected operator

Não me lembro como indicar vários tipos de "Classes de caracteres e expressões de colchetes" em um comando sed, e também não tenho certeza da minha utilização da localização da opção -n para indicar qual número de linha de texto deve funcionar.

Eu uso /p argumento / opção para indicar para sed que os padrões correspondidos (se sed encontrar alguma coisa) devem ser mantidos no arquivo original.

    
por Rom 31.12.2017 / 03:00

1 resposta

4

Para construir um intervalo de caracteres a partir de uma concatenação de classes de caracteres POSIX e caracteres literais, como . , você precisa de algo como

[[:alpha:][:digit:].]

e negá-lo

[^[:alpha:][:digit:].]

Então, para remover (substituir com nada) todos os caracteres exceto alfanuméricos, dígitos decimais e pontos:

sed 's/[^[:alpha:][:digit:].]//g' somefile
    
por 31.12.2017 / 03:13