Alterna do grep para o sed

0

Eu tenho arquivos students.txt , com linhas do formulário:

Surname, Forename: Day.Month.Year: Degree

Por exemplo:

Smith, John: 15.01.1986: MSc IT
Taylor, Susan: 04.05.1987: MSc IT
Thomas, Steve: 19.04.1986: MSc MIT
Sellen, Jo: 03.07.1987: MSc CSE

Como posso alterar o comando abaixo em um comando sed para retornar todos os sobrenomes dos alunos que nasceram em 1987?

$ grep 1987 students.txt | grep -o "^\(.*\),"
    
por Host Post 02.04.2011 / 03:45

3 respostas

5

sed -n '/1987/s/^\([^,]*\),.*$//p' students.txt

ou como Glenn apontou:

sed -n '/1987/s/,.*//p' students.txt
    
por 02.04.2011 / 04:15
3

Se você quiser usar o awk, sugiro uma resposta diferente à do Johnsyweb. O poder do awk inclui a escolha do (s) separador (es) do campo:

awk -F'[,: ]*' '$3 ~ /1987$/ {print $1}' students.txt

Mas a questão era sobre o sed, então acredito que o SiegeX deve conseguir o melhor voto.

    
por 02.04.2011 / 07:35
2

Esse tipo de problema é adequado para awk :

% awk '/\.1987:/ {gsub(/,.*/, ""); print}' students.txt 
Taylor
Sellen

Ou, especificando uma coluna, em vez da linha inteira (facilitando a personalização, caso deseje adicionar outras colunas em:

% awk '/\.1987:/ {
        gsub(/,$/, "", $1);          
        print $1;
}' students.txt
Taylor
Sellen
    
por 02.04.2011 / 06:01