Comando para obter os primeiros 5 e últimos 10 caracteres de uma linha

0

Eu tenho a seguinte linha:

postgres  3625     1  0 Jan31 ?        00:00:35 /opt/rh/rh-postgresql95/root/usr/bin/postgres -D /var/opt/rh/rh-postgresql95/lib/pgsql/data

Por favor, dê um comando para cortar os 5 primeiros caracteres e os 10 últimos caracteres e concatená-los em um único comando de linha.

    
por tester787 22.02.2018 / 19:20

5 respostas

0

Você pode alimentar a linha no Perl, assim:

$ printf "%s" {a..z} | perl -nlE'say substr($_,0,5) . substr($_,-10)'
abcdeqrstuvwxyz
    
por 22.02.2018 / 19:35
5

Não tenho certeza do que você quer fazer aqui, mas com

foo="postgres 3625 1 0 Jan31 ? 00:00:35 /opt/rh/rh-postgresql95/root/usr/bin/postgres -D /var/opt/rh/rh-postgresql95/lib/pgsql/data"

você pode usar a funcionalidade padrão bash para executar

$ echo ${foo:0:5}
postg
$ echo ${foo: -10:10}
pgsql/data
$ echo ${foo:0:5} ${foo: -10:10}
postg pgsql/data
$ echo ${foo:0:5}${foo: -10:10}
postgpgsql/data

O deslocamento negativo na segunda instrução significa "início no final".

    
por 22.02.2018 / 19:30
2

Usando sed :

sed -E 's/(.{5}).*(.{10})$//' infile

Ou use cut e wc (se houver apenas uma única linha como entrada ou todas as linhas estiverem no mesmo comprimento):

cut -c1-5,$(($(wc -c <infile)-10))- <infile
    
por 22.02.2018 / 19:57
0

Apenas para enriquecer a coleção de abordagens de linha de comando:

s="postgres  3625     1  0 Jan31 ?        00:00:35 /opt/rh/rh-postgresql95/root/usr/bin/postgres -D /var/opt/rh/rh-postgresql95/lib/pgsql/data"

grep abordagem:

echo $(printf "%s" $(grep -Eo '^.{5}|.{10}$' <<<"$s"))
postgpgsql/data

awk abordagem:

awk '{ print substr($0,1,5) substr($0, length-9) }' <<<"$s"
postgpgsql/data
    
por 22.02.2018 / 20:16
0

Outra abordagem com colrm e wc

start=5
end=10
s='postgres  3625     1  0 Jan31 ?        00:00:35 /opt/rh/rh-postgresql95/root/usr/bin/postgres -D /var/opt/rh/rh-postgresql95/lib/pgsql/data'
# with dash
printf "%s\n" "$s" | colrm $start $(($(printf "%s\n" "$s" | wc -c)-$end))
# with bash
# <<<$s colrm $start $(($(wc -c <<<$s)-$end))
    
por 24.02.2018 / 20:52