sed -n '/1987/s/^\([^,]*\),.*$//p' students.txt
ou como Glenn apontou:
sed -n '/1987/s/,.*//p' students.txt
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 "^\(.*\),"
sed -n '/1987/s/^\([^,]*\),.*$//p' students.txt
ou como Glenn apontou:
sed -n '/1987/s/,.*//p' students.txt
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.
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
Tags grep text-processing sed