한 줄의 숫자를 삭제하기 위해 sed 스크립트를 작성하는 방법은 무엇입니까?

한 줄의 숫자를 삭제하기 위해 sed 스크립트를 작성하는 방법은 무엇입니까?

샘플 파일

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 사이에 세 번째 공백이 남습니다.

관련 정보