그래서 저는 이 문제를 해결할 수 있는 도구가 있다는 것을 들어본 적이 있기 때문에 존재한다는 것을 알고 있지만 그것이 무엇인지는 모릅니다.
사용자 이름을 제외한 /etc/passwd의 모든 데이터를 필터링하는 것과 같은 작업을 수행하고 싶습니다.
예를 들어 다음 파일에서 user1, user2 및 user3을 가져오고 싶습니다. 이 경우 논리는 "파일의 각 줄에서 첫 번째 ':' 텍스트를 가져오는 것"일 수 있습니다.
user1:x:1:4
user2:x:2:5
user3:x:3:6
출력은 다음과 같습니다:
user1
user2
user3
답변1
cut
이런 목적으로 존재합니다. 이 -d
플래그는 구분 기호를 지정하고 -f
출력할 필드를 지정합니다.
cut -d: -f1 /etc/passwd
에 대한 인수는 첫 번째 및 세 번째 필드를 표시하거나 처음 세 필드를 표시하는 -f
것일 수 있으며 , 필드 대신 바이트와 문자를 읽는 플래그 도 있습니다 . 좀 더 유연한 것이 필요한 경우 일반적으로 해결책이 있습니다(참조1,3
1-3
-b
-c
awk
마태의 대답)
답변2
양식 입력에서 데이터를 추출할 때마다 고려해야 할 사항앗. 거의 모든 Unix 시스템에서 사용할 수 있으므로 다음과 같이 하는 것이 좋습니다.
awk -F':' '{print $1}' /etc/passwd
-F':'
: ":"을 열 구분자로 정의합니다.'{}'
: 각 라인에 대해 이 명령을 실행합니다.print $1
: 첫 번째 열을 화면에 인쇄합니다.
답변3
다음은 Perl 코드의 한 줄입니다:
perl -F/:/ -lane 'print $F[0]' /etc/passwd
답변4
귀하의 예에서는 3개의 이름이 모두 길이가 같습니다. 이 경우에는 일어날 수 있지만 /etc/passwd에서는 거의 발생하지 않습니다. colrm을 사용할 수도 있습니다:
echo "user1:x:1:4
> user2:x:2:5
> user3:x:3:6" | colrm 6
user1
user2
user3
아니면 물론이죠
cat FILE | colrm 6
useless use of cat
( 파일을 매개변수로 수동으로 전달할 수 없기 때문에 드문 경우는 적용되지 않습니다.)