Como executar uma ação apenas na primeira linha?

4
sed 's/.\(.*\)//' myfile

Say myfile contém:

abc
def
ghi

Eu quero remover o primeiro caractere somente da primeira linha, mas o acima o remove de toda a linha.

    
por munish 24.02.2012 / 06:44

3 respostas

10

Talvez sed '1s/.\(.*\)//' myfile ?

    
por 24.02.2012 / 06:46
3

também pode usar o awk: awk 'NR==1 {sub(/./,"")} 1'

    
por 24.02.2012 / 16:00
2

tail pode ler de um byte , portanto, se o seu arquivo usar apenas caracteres de byte único (normalmente UTF-8 ASCII ), isso vai funcionar.

Depende da sua situação, seja ela importante ou não, mas tail é mais rápido que sed ... provavelmente porque sed precisa processar cada linha individualmente. Mas não o use onde houver qualquer chance do primeiro caractere usar mais de um byte.

tail -c +2 "file"  

De man tail

-c, --bytes=N output the last N bytes; alternatively, use +N to output bytes starting with the Nth of each file

    
por 24.02.2012 / 08:09