첫 번째 공백 후 sed / awk를 사용하여 무엇이든 제거


20
aaaaaaaa 09  
bbbbbbbb 90   
ccccccccccccccc  89  
ddddd 09

위의 텍스트에서 sed / awk / replace를 사용하여 각 줄의 첫 번째 공백 다음에 나오는 것을 제거하고 싶습니다. 예를 들어 출력은 다음과 같습니다.

aaaaaaaa  
bbbbbbbb    
ccccccccccccccc  
ddddd 

도움을 주시면 감사하겠습니다.

답변:


35

세드

sed 's/\s.*$//'

그렙

grep -o '^\S*'

어 wk

awk '{print $1}'

의견에서 지적했듯이 -oPOSIX는 아닙니다. 그러나 GNU와 BSD 모두 가지고 있기 때문에 대부분의 사람들에게 효과적입니다.

또한, \s/ \S당신이 그것을 인식하지 못하는 경우가 문자 그대로의 공간을 사용하거나 공간과 탭, 브라켓 표현 (에 그 싶은 경우에 할 수있는 모든 시스템에하지 않을 수 있습니다 [...]), 또는 [[:blank:]]엄밀히 말하자면 그 문자 클래스를 (주 \s입니다 [[:space:]]CR, LF 또는 VT와 같이 세로 간격 문자와 동일 하고 포함합니다.

awk 하나는 선이 빈 문자로 시작하지 않는 가정합니다.


14
cut -d ' ' -f 1 < your-file

가장 효율적입니다.


4
나는 당신의 대답 중 일부에서 이것을 발견했고 그 이유가 있는지 궁금합니다. 명령없이 명령을 사용할 수있을 때조차도 항상 입력 리디렉션을 추가하는 것처럼 보입니다. 이것이 왜 <유용한 지 설명해 주 시겠습니까?
Joseph R.

5
@JosephR. 당신은 의미 cut < filecut file? 그런 다음 볼 unix.stackexchange.com/a/70759/22565
스테판 Chazelas가

절단은이 간단한 문제에 대한 최상의 솔루션 일 수 있습니다. 더 복잡한 매칭을 위해 awk (또는 perl)를 예약합니다.
ChuckCottrill

@StephaneChazelas (특징) 통찰력에 감사드립니다 :)
Joseph R.


1

그리고를 통해 하나 perl,

$ perl -pe 's/^([^ ]+) .*$/\1/' file
aaaaaaaa
bbbbbbbb
ccccccccccccccc
ddddd

GNU grep을 통해

$ grep -oP '^[^ ]*' file
bbbbbbbb
ccccccccccccccc
ddddd
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.