como fazer o corte inverso?

2

Eu sou novo nisso. Eu gostaria de perguntar, como inverter o corte?

Exemplo;

./24feb/frfr

Eu quero após o comando cut, o resultado será ./feb/frfr .

Como fazer isso?

    
por wina 19.10.2015 / 16:24

3 respostas

6
% echo ./24feb/frfr | cut -c 1-2,5-
./feb/frfr

Isso seria o inverso de cut -c 3-4 , que gera todos os caracteres ( bytes com versões atuais do GNU cut ) de cada linha, exceto a terceira e 4º.

A implementação GNU de cut também tem uma opção --complement para isso:

cut --complement -c 3-4

Para remover a primeira sequência de dígitos decimais, você pode usar sed :

sed 's/[0-9]\{1,\}//'

Para removê-lo, apenas se estiver na 3ª posição:

sed 's/^\(..\)[0-9]*//'

Ou para ser muito explícito em qual padrão deve acionar a remoção:

sed 's|^\(./\)[0-9]*\([[:lower:]]\{3\}/\)||'

Isso só remove o <0-or-more-digits> em uma linha correspondente: ./<0-or-more-digits><3-lowercase-letters>/<anything> .

    
por 19.10.2015 / 16:41
1

Isso não é possível com o corte. O corte depende da disponibilidade de um separador de campo. No seu exemplo de entrada desejada, não há nenhum caractere que possa ser usado como um separador de campo. A menos que você tenha mais controle sobre o formato de entrada, o corte não é a ferramenta para o trabalho. Isso poderia ser conseguido com sed ou awk. Por exemplo, In sed seria:

sed 's/[0-9]//g'

    
por 19.10.2015 / 16:39
0

Como complemento da resposta aceita acima, você pode combinar cut e sed subsution em um único comando usando a substituição de comandos.

Isso só funciona se você souber as posições dos caracteres no nome que gostaria de remover, ou pode descobrir esses valores de forma problemática.

name="./24feb/frfr"
cut_start=3
cut_end=4

echo "${name}" | sed "s/$(echo "${name}" | cut -c${cut_start}-${cut_end})//"

./feb/frfr

Como nota lateral ... normalmente, o ' é usado para sed , mas, neste caso, você deve usar " para permitir que a substituição do comando seja expandida.

    
por 15.03.2018 / 20:51

Tags