파일에 names
"이름 성" 형식의 이름 목록이 한 줄에 하나씩 포함되어 있다고 가정합니다. 이러한 이름은 정렬되지 않으며 성순으로 정렬되기를 원합니다. 그러나 각 줄의 이름 형식은 동일하게 유지되어야 합니다. 어느하나다음 명령은아니요올바르게 정렬된 이름 목록을 콘솔에 출력하시겠습니까?
[ ]cut -f 2 -d " " names | paste names - | sort -k 3 | cut -f 1
[x]sort -k 2 names
← 오답
[ ]sed 's/\(\w*\) \(\w*\)/\2 \1 \2/' names | sort | cut -f 2-3 -d " "
[ ]cut -f 2 -d " " names | sort
[ ]cut -f 2 -d " " names | paste - names | sort | cut -f 2
다음이 요청된 출력을 어떻게 생성하는지 이해할 수 없습니다.
sed 's/\(\w*\) \(\w*\)/\2 \1 \2/' names | sort | cut -f 2-3 -d " "
IE는 이름을 성을 기준으로 알파벳순으로 정렬하지만 "이름 성" 형식을 유지합니다. \w
직업의 다음 단계는 무엇입니까 *
? 파일명 뒤에 공백이 있어야 할 것 같아요. 여기에는 어떻게 \w
적용되나요?
답변1
다음은 GNU에만 적용되며 sed
BSD sed
동작은 다릅니다.
좋습니다. 단계별로 살펴보고 다음 용도로 사용해 보겠습니다 names
.
Alice Zylanzy
Zepher Applecart
Michael Copperside
우리는 이 명령을 사용하고 그것이 어떻게 작동하는지 단계별로 살펴보겠습니다.
$ sed 's/\(\w*\) \(\w*\)/\2 \1 \2/' names
Zylanzy Alice Zylanzy
Applecart Zepher Applecart
Copperside Michael Copperside
따라서 이 sed
명령은 줄 앞에 반복되는 성을 추가합니다. 그런 다음 간단한 작업을 수행합니다 sort
.
$ sed 's/\(\w*\) \(\w*\)/\2 \1 \2/' names | sort
Applecart Zepher Applecart
Copperside Michael Copperside
Zylanzy Alice Zylanzy
멋지네요. 이제 성별로 정렬되었군요. 이제 우리가 cut
사용한 접두사를 제거하는 데 사용합니다.
$ sed 's/\(\w*\) \(\w*\)/\2 \1 \2/' names | sort | cut -f 2-3 -d " "
Zepher Applecart
Michael Copperside
Alice Zylanzy
..그들이 말했듯이 Bob은 당신의 삼촌입니다.
잡초 속으로어떻게명령 sed
이 작동합니다: \w
는 "단어 문자"를 의미하는 마법 주문이며 의 약어입니다 /[0-9A-Za-z_]/
. \w*
0개 이상의 "단어 문자"를 의미하며, 이것이 이름이 그룹화되는 방식입니다. 모든 이름에 밑줄이나 숫자가 없다고 가정하면 다음과 같이 다시 작성할 수 있습니다.
sed 's/\([A-Za-z]*\) \([A-Za-z]*\)/\2 \1 \2/' names
sed
전체 명령 섹션을 섹션별로 분류하면 다음과 같습니다.
sed 명령 s
은 "검색 및 바꾸기" 또는 "교체" 명령입니다. 첫 번째와 두 번째 s 사이의 표현식은 /
두 번째와 세 번째 s /
사이의 표현식 으로 대체됩니다.
그래서 우리는 이것을 대체할 것입니다:
NODE EXPLANATION
--------------------------------------------------------------------------------
( group and capture to \1:
\w* word characters (a-z, A-Z, 0-9, _) (0 or
more times (matching the most amount
possible))
) end of \1
' '
( group and capture to \2:
\w* word characters (a-z, A-Z, 0-9, _) (0 or
more times (matching the most amount
possible))
) end of \2
이것으로:
NODE EXPLANATION
--------------------------------------------------------------------------------
\2 what was matched by capture \2
' '
\1 what was matched by capture \1
' '
\2 what was matched by capture \2