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

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

13
パイプ文字を持つパターンで複数のパターンをgrepするにはどうすればよいですか?
2つのパターンのいずれかに一致する複数のファイルですべての行を検索したい。入力して探しているパターンを見つけようとしました grep (foo|bar) *.txt しかし、シェルは|をパイプとして解釈しbar、実行可能ファイルではない場合に文句を言います。 同じファイルセットで複数のパターンをgrepするにはどうすればよいですか?

8
grepは、一致する指定されたグループのみを出力できますか?
ファイルがあるとしましょう: # file: 'test.txt' foobar bash 1 bash foobar happy foobar 「foobar」の後に表示される単語のみを知りたいので、この正規表現を使用できます。 "foobar \(\w\+\)" 括弧は、foobarの直後の単語に特別な関心があることを示しています。しかし、aを実行するとgrep "foobar \(\w\+\)" test.txt、「foobarの後の単語」ではなく、正規表現全体に一致する行全体が取得されます。 foobar bash 1 foobar happy そのコマンドの出力が次のようになっていることを望みます。 bash happy 正規表現でグループ化(または特定のグループ化)に一致するアイテムのみを出力するようにgrepに指示する方法はありますか?


14
sedを使用して複数行の文字列を置き換えるにはどうすればよいですか?
を\n使用して置換するパターンに追加すると、sed一致しないことに気付きました。例: $ cat > alpha.txt This is a test Please do not be alarmed $ sed -i'.original' 's/a test\nPlease do not/not a test\nBe/' alpha.txt $ diff alpha.txt{,.original} $ # No differences printed out これを機能させるにはどうすればよいですか?


8
複数のANDパターンでgrepを実行する方法は?
パターン間で暗黙的なANDを使用したマルチパターンマッチを取得したいと思います。つまり、シーケンスで複数のgrepsを実行するのと同じです。 grep pattern1 | grep pattern2 | ... それをどのように変換するのですか? grep pattern1 & pattern2 & pattern3 引数を動的に構築するため、単一のgrepを使用したいので、すべてが1つの文字列に収まらなければなりません。フィルターの使用はシステム機能であり、grepではないため、それは引数ではありません。 この質問と以下を混同しないでください。 grep "pattern1\|pattern2\|..." これはORマルチパターンマッチです。

7
sedを使用して、複雑な文字列を検索および置換します(正規表現を使用することが望ましい)
次の内容のファイルがあります。 <username><![CDATA[name]]></username> <password><![CDATA[password]]></password> <dbname><![CDATA[name]]></dbname> そして、1行目の「名前」を「何か」に、2行目の「パスワード」を「何か」に、3行目の「名前」を「何か」に変更するスクリプトを作成する必要があります。ファイル内で発生するこれらの順序に依存することはできないため、「name」の最初の出現を「something」に、2回目の「name」の出現を「somethingdifferent」に単純に置き換えることはできません。正しいものを見つけて置き換えるために、実際に周囲の文字列を検索する必要があります。 これまでのところ、最初の「名前」の出現を見つけて置き換えるためにこのコマンドを試しました。 sed -i "s/<username><![CDATA[name]]><\/username>/something/g" file.xml しかし、それは機能していないので、これらのキャラクターのいくつかはエスケープする必要があるなどと考えています。 理想的には、正規表現を使用して、2つの「ユーザー名」の出現を一致させ、「名前」のみを置換できるようにしたいです。このしかし、とのような何かsed: <username>.+?(name).+?</username> 括弧内の内容を「何か」に置き換えます。 これは可能ですか?



2
Grep「OR」正規表現の問題
正規表現でgrepを使用して、2つの文字列のうち1つに一致するファイル内の行を見つけようとしています。ここに私のgrepがあります: $ grep "^ID.*(ETS|FBS)" my_file.txt 上記のgrepは結果を返しません。ただし、次のいずれかを実行した場合: $ grep "^ID.*ETS" my_file.txt または $ grep "^ID.*FBS" my_file.txt 特定の行に一致します。OR正規表現が一致しないのはなぜですか?助けてくれてありがとう!

5
コメント(#で始まる行)を無視してファイルを比較する方法は?
パッケージマネージャーのオリジナルと、自分で変更したカスタマイズされたファイルの2つの構成ファイルがあります。動作を説明するコメントを追加しました。 diffコメントをスキップして構成ファイルを実行するにはどうすればよいですか?コメント付きの行は、次によって定義されます。 オプションの先頭の空白(タブとスペース) ハッシュ記号(#) 他のキャラクター 最初の要件をスキップする(最も単純な)正規表現はになります#.*。GNU diff 3.0 の--ignore-matching-lines=RE(-I RE)オプションを試しましたが、そのREで動作させることができませんでした。私も試してみましたが.*#.*、.*\#.*運はありませんでした。文字通り行(Port 631)を置くと、RE何にも一致しません。また、スラッシュの間にREを置くことも役立ちません。 「diff」ツールで提案されている正規表現のフレーバーが欠けているように見えますか?、私は試しましたgrep -G: grep -G '#.*' file これはコメントと一致するようですが、では機能しませんdiff -I '#.*' file1 file2。 それでは、このオプションはどのように使用すべきでしょうか?diff特定の行をスキップするにはどうすればよいですか(私の場合はコメント)?grepファイルを作成して一時ファイルを比較することはお勧めしません。


7
複数のフォルダー名のファイルを検索する
私はすべてのファイルのリストにしようとしていますdir1、dir2、dir3そしてdir4それは私がのサブディレクトリとしての任意の場所にあるかもしれないcwd使用してfindコマンドを。私は次のことを試みましたが成功しませんでした: find . -type f -regextype posix-egrep -regex 'dir1/.+|dir2/.+|dir3/.+|dir4/.+' 私も試してみposix-extendedました。これらのファイルを一覧表示するにはどうすればよいですか?

9
不可解に失敗するタブの単純なsed置換
これは本当に簡単なはずですが、何らかの理由で機能していません。 sed -i.bak -E 's/\t/ /' file.txt タブ文字を置き換える代わりに、文字を置き換えますt。私は、引用で遊んで、私は考えることができ、この上のすべてのバリエーションを試してみましたなどIましGoogleで検索して見つけた誰もが、かなり類似した表現を使用して、彼らは彼らのために仕事に思えます。 これ-EはOS Xのものです。失敗はOS Xの奇妙な癖の結果かもしれないと思ったsedので、Rubyでも試してみて(なしで-i)、同じ結果を得ました: ruby -pe '$_.gsub!(/\t/," ")' < file.txt > file.new OS XとiTermでBash 3.2.51を使用していますが、これらのどれがひどく関連するかはわかりません。奇妙な環境変数は設定していませんが、関連があると思われるものは投稿できます。 何が間違っているのでしょうか? 更新:Rubyバージョンを試してみたときに、Gillesがそれが機能することを指摘しているため、他の間違いやタイプミスを犯したに違いありません(そして、私は彼に間違った方向を向かわせたことがありません!)何が起こったのかはわかりませんが、それは間違いだったに違いありません。


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