sed를 사용하여 숫자와 점을 일치시키는 방법은 무엇입니까?


76

내가 사용하려고 해요 sed숫자가 점 (예 : 바로 다음에 모든 패턴을 대체 할 3., 355.빈 문자열로). 그래서 시도합니다 :

sed 's/\d+\.//g' file.txt

그러나 작동하지 않습니다. 왜 그런 겁니까?


1
이 기사가 매우 유용하다는 것을 알았습니다
Stphane

답변:


111

sed는 펄이 아니기 때문에 sed 정규식에는 \d속기 가 없습니다 .

sed 's/[[:digit:]]\+\.//g'

sed 정규식 문서는 여기에 있습니다 .


3
숫자가 0 이상인 경우 입니다. 숫자 0을 허용하기 때문에 /[[:digit:]]*\. /문자열과 일치합니다 foo.. 그림과 같이 하나 이상의 사용 을 원한다면\+
glenn jackman

71

두 가지 문제 :

  1. sed지원하지 않습니다 \d. [0-9]또는을 사용하십시오 [[:digit:]].

  2. +특별한 의미를 얻으려면 백 슬래시를 사용해야합니다 \+.


6
+를 백 슬래시하는 대신 (예를 들어 Mac OS X에서는 작동하지 않음) interpret regular expressions as extended (modern) regular expressions rather than basic regular expressions (BRE's).슬프게도 -E 옵션을 사용할 수 있습니다 . \ d 문제에는 도움이되지 않습니다 ...
gMale

4
@gmale : -EGNU sed에서는 작동하지 않으며 -r대신 사용 합니다.
choroba

12
좋아 ... sed휴대성에있어 짜증나 는 것처럼 보인다 ...
iconoclast

@choroba 나는 오늘 나 자신을 혼란스럽게 생각합니다. 시끄러운 의견을 삭제하겠습니다 ...
Steven Lu

기본적으로,이에 대해 사람들에게 경고하기 위해 노력했다 : 당신이 (확장 정규식을 사용하지 않는 경우 -EBSD에 나오지와 -rGNU에 나오지도), BSD에서 나오지도,도 +\+(와 같은 ?GNU에 나오지 반면 당신은 전혀 작동) 할 수 있습니다 그들이 백 슬래시와 함께 작동하도록하십시오. 따라서 스크립팅에서 확장 정규식을 사용하는 일반적인 권장 사항
Steven Lu

3

sed 매뉴얼 페이지는 re_format 매뉴얼 페이지를 참조합니다. (1) 더 이상 사용되지 않는 정규 표현식과 확장 된 정규 표현식; (2) 비 강화 대 강화 된 정규식. 4 가지 조합이 가능합니다. sed는 더 이상 사용되지 않거나 확장되어 있지만 두 경우 모두 향상되지 않은 경우에만 지원됩니다. \ d 연산자는 고급 정규 표현식의 기능이므로 sed에서 지원하지 않습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.