sedを使用して数字の後にドットが続くように一致させる方法は?


76

私が使用しようとしているsed数字は、(のようなドットの直後にすべてのパターンを置換する3.355.空の文字列によって)。だから私は試します:

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

しかし、それは機能しません。何故ですか?


1
この記事は非常に便利だと感じました
-Stphane

回答:


111

sedはperlではないため、sedの正規表現には\d短縮形がありません。

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

正規表現のドキュメントはこちら


3
ゼロ以上の数字が必要な場合です。ゼロ桁を許可するため/[[:digit:]]*\. /、文字列と一致しますfoo.。示されているように1つ以上の使用が必要な場合\+
グレンジャックマン

71

2つの問題:

  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代わりに使用します。
チョロバ

12
以下のようにわかりました...それは確かに見えるsed、それは可搬性に来るときだけ吸います...
アイコノクラスト

@choroba今日は混乱したと思う。私は...私の騒々しいコメントを削除するつもりだ
スティーブン・呂

基本的に、私が人々に警告しようとしていたのは:-EBSD sedと-rGNU sedで拡張正規表現を使用しない場合、BSD sedでは+まったく動作しません\+?GNU sedでは動作しません)バックスラッシュを使用して作業させます。したがって、スクリプトで拡張正規表現を使用するための一般的な推奨事項
スティーブンルー

3

sedのマニュアルページは、re_formatのマニュアルページを参照しています。(1)廃止された正規表現と拡張された正規表現。(2)非正規表現と拡張正規表現。4つの組み合わせすべてが可能です。sedには、廃止されたものと拡張されたものの両方がサポートされていますが、いずれの場合も非拡張のみがサポートされています。\ d演算子は拡張正規表現の機能であるため、sedではサポートされていません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.