샘플 파일
a.b.gg3d 0000000001 0000000001 y
a.b.112a 0000000000 0000000001 y
a.b.gg3s 0000000001 0000000001 y
a.b.1111 0000000000 0000000001 m
위의 예와 비슷한 약 3,000개의 고유 라인이 포함된 파일이 있습니다. sed를 사용하여 각 줄에서 "xxxxxxxxx xxxxxxxxxx" 숫자를 제거하고 싶습니다. 위의 예를 사용하여 sed 스크립트가 다음 출력을 생성하도록 합니다.
a.b.gg3d y
a.b.112a y
a.b.gg3s y
a.b.1111 m
어떻게 해야 하나요? sed에게 "첫 번째 공백 뒤의 모든 숫자를 제거하고 마지막 문자는 유지합니다"라고 알려주는 명령 문자열이 있습니까?
답변1
이 입력이 주어지면 첫 번째 필드와 마지막 필드를 유지하려고 합니다. awk를 사용하는 것은 매우 간단합니다.
awk '{print $1, $NF}' filename
sed를 사용하면 공백으로 구분된 모든 숫자 전용 단어가 대체됩니다.
sed ':a; s/ [[:digit:]]\+ / /; ta'
답변2
cut
첫 번째와 네 번째 열을 인쇄하는 또 다른 사용 전용 솔루션 :
cut -d' ' -f1,4 < samplefile.txt
답변3
sed -e 's/[ ].*[ ]/ /' yourfile
가장 왼쪽 공간부터 가장 오른쪽 공간까지 살펴보고 하나의 공간으로 대체합니다. IOW, 첫 번째 필드와 마지막 필드를 유지하십시오.
선행 및/또는 후행 공백이 없다고 가정합니다. 탭이 없습니다.
그렇지 않으면 언제든지 다음을 수행할 수 있습니다.
SPC=`echo 'x' | tr 'x' '\040'`
TAB=`echo 'x' | tr 'x' '\011'`
WS="[$TAB$SPC]"
sed -e "s/^$WS*//;s/${WS}\$//;s/${WS}.*${WS}/${SPC}/" < yourfile
답변4
$ echo "a.b.gg3d 0000000001 0000000001 y" |sed -r 's/[ ]+[0-9]+//g'
a.b.gg3d y
-r 정규식 패턴
하나 이상의 공백과 0-9 범위의 하나 이상의 숫자를 검색하고 있습니다. 기술적으로 이는 두 번 일치하므로 abgg3d와 y 사이에 세 번째 공백이 남습니다.