タグ付けされた質問 「regular-expression」

正規表現は、文字列内の文字のパターンを照合する手段です。

4
ファイル内のこれまたはその(2つのこと)をgrepするにはどうすればよいですか?
「then」と「there」を含むファイルがあります。 できます $ grep "then " x.x x and then some x and then some x and then some x and then some そして私はできる $ grep "there " x.x If there is no blob none some will be created 1つの操作で両方を検索するにはどうすればよいですか?私は試した $ grep (then|there) x.x -bash:予期しないトークン `( 'の近くの構文エラー そして grep "(then|there)" …

4
[0-9]、[[:digit:]]と\ dの違い
で正規表現上のWikipediaの記事、それがいるようです[[:digit:]]= [0-9]= \d。 それらが等しくない状況は何ですか?違いはなんですか? いくつかの調査の後、1つの違いはブラケット式[:expr:]がロケールに依存していることだと思います。

4
Vim-1つの新しい行\ nを2つの\ nに置き換える方法
vimエディターで、vimコマンドモードを使用して、改行文字(\ n)を2つの改行文字(\ n \ n)に置き換えます。 入力ファイルの内容: This is my first line. This is second line. 私が試したコマンド: :%s/\n/\n\n/g 文字列を不要な文字に置き換えます This is my first line.^@^@This is second line.^@^@ 次に、次のコマンドを試しました :%s/\n/\r\r/g 正常に動作しています。2番目のコマンドで問題なく動作する理由を説明できますか?

2
grepとドル記号のエスケープ
どのファイルに文字列があるのか​​知りたいです$Id$。 grep \$Id\$ my_dir/mylist_of_files 0回を返します。 私は使用しなければならないことを発見しました grep \$Id$ my_dir/mylist_of_files 次に$Id、出力でが色付けされていることがわかります。つまり、一致しています。 どうやって2つ目を一致させることができ$、なぜ機能しないの\$Id\$ですか 2番目$が最後の文字であるかどうかは関係ありません。 grep2.9 を使用します。 質問を投稿する前に、Googleを使用しました... 答えを見つけました test2という名前のファイルで$(ドル記号)を検索するには、次のように入力します。 grep \\ $ test2 \\(二重バックスラッシュ)文字は、シェルに強制的に\ $(単一のバックスラッシュ、ドル記号)をgrepコマンドに渡すために必要です。\(単一のバックスラッシュ)文字は、次の文字(この例では$)を式文字ではなくリテラル文字として扱うようにgrepコマンドに指示します。バックスラッシュなどのエスケープ文字を使用する必要性を回避するには、fgrepコマンドを使用します。 しかし、なぜgrep \$Id機能するのか、なぜgrep \\$Id\\$機能しないのかはわかりません。 私は少し混乱しています...

6
入力番号が整数かどうかを確認する
入力が整数かどうかを確認しようとしていますが、100回入力を繰り返しましたが、このエラーは表示されません。残念ながら機能しません。すべての入力(数値/文字)のifステートメントをトリガーします read scale if ! [[ "$scale" =~ "^[0-9]+$" ]] then echo "Sorry integers only" fi 引用符をいじりましたが、見逃したか、何もしませんでした。何が間違っていますか?入力が単なる整数かどうかをテストする簡単な方法はありますか?

3
VIMを使用して置き換え、検索パターンの一部を再利用します
私はVIm、検索文字列の一部である正規表現を再利用できる、いくつかの置換を行うために、検索および置換コマンドを設定および試行しています。 簡単な例では、私が交換したい行になる(10)まで{10}10は任意の数とすることができます。 ここまで来ました .s/([0-9]*)/what here??/ 私が望む部分と正確に一致します。 今、交換、私は試しました .s/([0-9]*)/{\0}/ しかし、これは出力として与えます {(10)} その後、私は試しました .s/(\zs[0-9]*\ze)/{\0}/ しかし、それは私({10})にを与え、私もそれを閉じましたが、私が望むものではありませんでした。 これの代わりに他の種類のマーキング/逆参照が必要だと思います\0が、どこを見るべきかわかりません。質問は、これをvimで行うことができますか?

5
GNUまたはBSD Sedの正規表現の代替/演算子(foo | bar)
私はそれを機能させることができないようです。GNU sedのドキュメントでは、パイプをエスケープすると書かれていますが、それは機能せず、エスケープなしでストレートパイプを使用することもできません。括弧を追加しても違いはありません。 $ echo 'cat dog pear banana cat dog' | sed 's/cat|dog/Bear/g' cat dog pear banana cat dog $ echo 'cat dog pear banana cat dog' | sed 's/cat\|dog/Bear/g' cat dog pear banana cat dog

2
LC_COLLATEは文字範囲に影響しますか?
照合順序LC_COLLATEは、個々の文字の並べ替え順序だけでなく、文字範囲の意味も定義します。それともそうですか?次のスニペットを検討してください。 unset LANGUAGE LC_ALL echo B | LC_COLLATE=en_US grep '[a-z]' 直感的にBはにない[a-z]ので、何も出力されません。それがUbuntu 8.04または10.04で起こります。しかし、Debianのレニーやスクイズを実行しているいくつかのマシン上で、B範囲があるため、発見されたa-zの間だすべてのものが含まaとz大文字を含む照合順序で、BスルーをZ。 テストされたすべてのシステムには、en_USロケールが生成されています。また、ロケールを変更しようとしました:B上記と一致するマシンでは、{en_{AU,CA,GB,IE,US},fr_FR,it_IT,es_ES,de_DE}{iso8859-1,iso8859-15,utf-8}日本語(使用可能なエンコーディング)およびC/ を除くすべての使用可能なロケール(ほとんどがラテン語ベース:、中国語ロケールも)で同じことが起こりますPOSIX。 ASCIIを超える場合、正規表現で文字範囲は何を意味しますか?一部のDebianインストールと他のDebianインストールとUbuntuの間に違いがあるのはなぜですか?他のシステムはどのように動作しますか?誰が正しいのか、誰に対してバグを報告すべきか? (主にGNU libcベースのシステム[a-z]でのen_USロケールなどの文字範囲の動作について具体的に尋ねていることに注意してください。小文字またはASCII小文字の一致方法は尋ねていません。) 2台のDebianマシンで、1台Bが入っ[a-z]ているものと入っていないものの出力LC_COLLATE=en_US locale -k LC_COLLATEは collate-nrules=4 collate-rulesets="" collate-symb-hash-sizemb=1 collate-codeset="ISO-8859-1" そしての出力LC_COLLATE=en_US.utf8 locale -k LC_COLLATEは collate-nrules=4 collate-rulesets="" collate-symb-hash-sizemb=2039 collate-codeset="UTF-8"

11
単一の改行のみを置き換えるより良い方法が必要ですか?
私は通常LaTexにコンパイルするため、または改行が無視される他の形式で書くので、私は文ごとに1行を書く習慣があります。空白行を使用して、新しい段落の開始を示します。 これで、このスタイルで記述されたファイルがあり、プレーンテキストとして送信したいだけです。単一の改行をすべて削除したいが、二重の改行はそのままにしておきたい。これは私がやったことです: sed 's/$^/NEWLINE/' file.txt | awk '{printf "%s ",$0}' | sed 's/NEWLINE/\n\n/g' > linebreakfile.txt これは空の行をファイルに表示されないと確信しているいくつかのテキストで置き換えます:NEWLINEそして、それはawkですべての改行を取り除きます(いくつかのウェブサイトでそのトリックを見つけました)そして、NEWLINEsを必要な2つの改行で置き換えます。 これは非常に単純なことを行うための長い方法のようです。もっと簡単な方法はありますか?また、複数のスペース(何らかの理由で時々入り込む)を単一のスペースに置き換える方法があれば、それも良いでしょう。 私はemacsを使用しているので、いくつかのemacs固有のトリックがあれば良いのですが、純粋なsedバージョンまたは純粋なawkバージョンが必要です。

7
それらを含む2つのパターン間の最初の出現を選択する方法
それらを含む2つのパターン間で最初の出現を選択するにはどうすればよいですか。sedまたはを使用してくださいawk。 私が持っています: text something P1 something content1 content2 something P2 something text something P1 something content3 content4 something P2 something text P1とP2の間に最初に現れる行が必要です(P1行とP2行を含む)。 something P1 something content1 content2 something P2 something

3
sedの正規表現で[\ w] +を使用するには?
私はWindowsを使用していますが、私の質問はまだここに正しく置かれていると思います。 C:\Users\User>grep --version GNU grep 2.6.3 C:\Users\User>sed --version GNU sed version 4.2.1 私は次のように動作していることに気付きました(出力here): echo here | grep -E "\w+" echo here | grep -E "[her]+" しかし、これは機能しません(何も出力しません): echo here | grep -E "[\w]+" これは再び行います(出力here): echo here | grep -P "[\w]+" だから[\w]、Perlの正規表現に固有の何かだと思います。あれは正しいですか? それでは、話しましょうsed。これは動作します(出力gone): echo here | sed -r "s/\w+/gone/" echo here | …

9
複数の行にわたってパターンを「grep」するにはどうすればよいですか?
grep/ を誤用しているようですegrep。 私は複数行の文字列を検索しようとしていて、探しているものが一致するはずだとわかっている間に一致を見つけることができませんでした。元々、自分の正規表現は間違っていると思っていましたが、最終的にはこれらのツールが行ごとに動作することを読みました(また、私の正規表現は非常に些細なため問題になりません)。 それでは、複数の行にわたってパターンを検索するためにどのツールを使用しますか?

6
一意の文字を含む10文字すべての単語の正規表現
私は10文字のすべての単語を表示する正規表現を作成しようとしていますが、どの文字も繰り返されていません。 これまでのところ、私は持っています grep --colour -Eow '(\w{10})' これは、質問の最初の部分です。「一意性」を確認するにはどうすればよいですか?後方参照を使用する必要があることを除けば、本当に手がかりはありません。

5
特定の桁数を含むvim検索番号
大きなドキュメントで特定の長さの数値を見つける必要があります。このために正規表現を使用しようとしました。たとえば、正確に2桁の数字を検索する必要がある場合は、使用します\d\d(つまり、/ dを2回押した後にスペースを続けます)。これはうまく機能します。 しかし、10桁の数字を見つけるには、\d10回入力するのは実際には不可能です。 試しました\d{2}、「E486:パターンが見つかりません:\ d {2}」 これを達成するためのより速く/簡単な方法はありますか?


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