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
아래 명령을 sed
1987년에 태어난 학생의 모든 성을 반환하는 명령으로 변경하려면 어떻게 해야 합니까?
$ 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