grep에서 sed로 전환

grep에서 sed로 전환

students.txt다음 형식의 줄이 포함된 파일이 있습니다 .

Surname, Forename: Day.Month.Year: Degree

예를 들어:

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

아래 명령을 sed1987년에 태어난 학생의 모든 성을 반환하는 명령으로 변경하려면 어떻게 해야 합니까?

$ grep 1987 students.txt | grep -o "^\(.*\),"

답변1

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

또는 Glenn이 지적했듯이:

sed -n '/1987/s/,.*//p' students.txt

답변2

awk를 사용하고 싶다면 Johnsyweb에 대한 다른 답변을 제안하겠습니다. awk의 강력한 기능에는 필드 구분 기호 선택이 포함됩니다.

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

하지만 문제는 sed에 관한 것이므로 SiegeX가 더 나은 투표를 받을 자격이 있다고 생각합니다.

답변3

이 유형의 질문은 다음과 같은 경우에 적합합니다 awk.

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

또는 전체 행 대신 열을 지정합니다. 그러면 다음 위치에 추가 열을 추가하려는 경우 더 쉽게 사용자 정의할 수 있습니다.

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

관련 정보