2012-11-23 2 views
3

데이터에 토큰 집합이 있고 후행 ".[0-9]"을 제거하고 싶지만 regexp를 올바르게 인용하는 방법을 알 수 없습니다. 첫 번째 경기는 모두 .까지이고 두 번째 경기는 .과 숫자로 이루어져야합니다. 나는 첫 시합을 유지할 생각이다.sed와 일치하는 첫 번째 인스턴스를 유지하는 방법

data="thing thing__aaa.0 thing__bbb.3 thing__ccc.5 other_aaa other_bbb other_ccc.5" 
data=`echo $data | sed s/\([a-zA-Z0-9_]+\)\(\.[0-9]\)/\1/g` 
echo $data 

실제 출력 :

thing thing__aaa.0 thing__bbb.3 thing__ccc.5 other_aaa other_bbb other_ccc.5 

원하는 출력 :

thing thing__aaa thing__bbb thing__ccc other_aaa other_bbb other_ccc 

아이디어가 인용되지 않은 ([a-zA-Z0-9_]+) 첫 정합 기이고 (\.[0-9]).number 일치한다는 것이다. \1은 두 그룹을 첫 번째 그룹으로 대체해야합니다.

+0

괄호를 벗어 났습니까? – bozdoz

+0

@all, Ive 질문을 분명히했다. 도움이 되길 바란다. 그리고 나는 누군가를 downvote하지 않았다. ...! – NWS

+0

'+'가'\ +'일 필요가 있다는 것을 제외하고는 거의 거기에 있습니다. – potong

답변

1

어떻게 바로

echo $data | sed 's/\.[0-9]//g' 

경우 또는 수 방금 형태 \.[0-9]의 모든 문자열을 삭제할 것 같습니다

echo $data | sed 's/\.[0-9]\+//g' 
+0

월요일에 다시 돌아올 때 알 수 있습니다. :) – NWS

+0

고마워,이 작품! – NWS

0

다음, 이상의 숫자를 포함 할 수 있습니다에 대한. 그래서 왜는 수행

sed 's/\.[0-9][0-9]*\(\|$\)/\1/g' 
-1

나는 일반적으로 쉘 특정 확장자의 사용을 권장하지 않습니다.

sed 's/\.[0-9]+\b//g' 

(이것은 다른 나오지도를 위해 당신이 할 수있는 GNU 나오지도의 \b+ 확장에 의존 이 모든 자리 수없는 확장을 삭제된다는

bash$ data=(thing thing__aaa.0 thing__bbb.3) 
bash$ echo "${data[@]%.[0-9]*}" 

주 (예 :: 당신이 떠들썩한 파티를 사용하는 경우,하지만 당신은 배열을 사용하여 행복 할 수있다). 그러나 아마도 귀하의 필요에 적합 할 것입니다.)

관련 문제