1 名前:正規表現 mailto:正規表現 [02/12/06 18:09] 正規表現
361 名前:名無しさん@お腹いっぱい。 mailto:sage [03/12/05 10:59] まあバッドノウハウだとも思うけどナー www.namazu.org/~satoru/misc/bad-knowhow.html
362 名前:名無しさん@お腹いっぱい。 mailto:sage [03/12/05 13:26] そこまでのものではないと思うけど、 この例だと、頭の中でpsの出力まで加工しちゃうからな(w
363 名前:名無しさん@お腹いっぱい。 mailto:sage [03/12/05 20:33] grep -v grep でええやん。
364 名前:名無しさん@お腹いっぱい。 mailto:sage [03/12/30 00:05] muttのaliasで alias keyword Name <mailaddress> みたいなフォーマットで並んでいるファイルを alias keyword <mailaddress> # Name に整形しようと思い, cat alias | sed 's![[:space:]]*alias[[:space:]]*\([^[:space:]]*\)[[:space:]]*\(.*\)[[:space:]]*<\(.*\)>!alias \1 <\3> # \2!' > alias.new としました. 上手く行くんですが, "#" の位置が行ごとにバラバラなのが気持ち悪いです. そのファイルで "#" 以前の文字数が一番長いものを調べ, そこに合わせて その他の行の "#" 以降を持ってくるようにするにはどうすればいいんでしょうか?
365 名前:名無しさん@お腹いっぱい。 mailto:sage [03/12/30 00:14] sedでやれってか? 漏れはへたれなので、Perlなどを使ってしまうが(w
366 名前:名無しさん@お腹いっぱい。 mailto:sage [03/12/30 00:28] >>364 2パスでやれば?
367 名前:名無しさん@お腹いっぱい。 mailto:sage [03/12/30 09:20] 2パス?
368 名前:名無しさん@お腹いっぱい。 mailto:sage [03/12/30 16:05] >>367 "#" 以前が一番長いのを調べてから、それに合わせて整形し直せば。
369 名前:名無しさん@お腹いっぱい。 mailto:sage [04/01/11 21:57] >>364 70桁でそろえる場合 sed ':a /.\{70\}\#/!bc; b; :c s/\(.*\)\#\(.*\)$/\1 \#\2/; ta' 亀ですが、こんなんでどうでしょう
370 名前:名無しさん@お腹いっぱい。 mailto:sage [04/01/11 22:21] 決め打ちでいいなら何の苦労もないわけで。
371 名前:名無しさん@お腹いっぱい。 mailto:sage [04/01/14 23:40] >>369 反則技。gawk で。sed ではどうやっても出来ないような気が……(_ _;) # sed でできるのか? { a=index($0,"#"); if(a>best) { best=a; } c[FNR]=$0 } END { for(i=0;i<=NR;i++){ x=index(c[i],"#"); if(x && x<best) { for (j=x;j<best;j++) { gsub("#"," #",c[i]); } } print c[i] } }
372 名前:名無しさん@お腹いっぱい。 mailto:sage [04/01/15 23:45] ( ´∀`)
373 名前:名無しさん@お腹いっぱい。 mailto:sage [04/02/03 10:33] 保守
374 名前:名無しさん@お腹いっぱい。 [04/02/06 18:23] 教えてください。 Windows用のファイルをemacsなんかで開いたとき,最下行に ^Z という符号が表示されることがあります。 これはいったい何でしょうか?
375 名前:名無しさん@お腹いっぱい。 mailto:sage [04/02/06 19:31] いわゆるeof
376 名前:名無しさん@お腹いっぱい。 mailto:sage [04/02/06 21:01] >>375 ありがとうございます。この符号のあるファイル同士をcatで連結すると,途 中にこの符号が入ってしまいます。この符号をsedでマッチさせて消去したい のですが,どうすればいいでしょうか。 sed '/^$/d' ではダメでした。
377 名前:名無しさん@お腹いっぱい。 mailto:sage [04/02/06 21:09] >>376 いわゆるeof
378 名前:名無しさん@お腹いっぱい。 [04/02/06 22:38] EOF符号をsedで消去できますか?
379 名前:名無しさん@お腹いっぱい。 mailto:sage [04/02/21 22:59] grep で使える正規表現を精密に解説したサイトはありますかね? 日本語/英語どっちでもいいのですが。
380 名前:名無しさん@お腹いっぱい。 mailto:sage [04/02/22 00:19] www.kt.rim.or.jp/~kbk/regex/regex.html
381 名前:名無しさん@お腹いっぱい。 mailto:sage [04/02/22 00:29] レベル低いなー 378に対して出来るとも出来ないとも言えないのか...
382 名前:名無しさん@お腹いっぱい。 mailto:sage [04/02/22 00:58] 378=381 ですか?
383 名前:名無しさん@お腹いっぱい。 mailto:sage [04/02/22 02:14] >>378 できるよ。普通に s/^Z// とかすればいい。もちろん^ZはEOFの一文字ね。 こんなの試せばすぐわかるだろと思ってたんだが、よく>>376 を読むと、 「正規表現は純なテキストであるべきで特殊記号を混ぜるのはイクナイ」 と感じたんだろうな。まあ気持ちはわかるわ。 最近の正規表現拡張では、文字をコードの数値で表現する文法が 入ってたりする方が普通(例えばperlとか)だもんな。
384 名前:338 mailto:sage [04/02/22 02:24] でね、特殊記号の特別なケースがtab。大昔は\tなんて表現なかったさ。 よく画面上の見た目やハードコピーや雑誌からシェルスクリプトを打ち直して、 tabとspaceの違いで動かないなんてことが時々あったんだよ。 あと勝手にシェルスクリプトを整形されて動かなくなるとか。
385 名前:名無しさん@お腹いっぱい。 mailto:sage [04/02/22 02:52] >>382 いいえ >>383 ありがトン!
386 名前:名無しさん@お腹いっぱい。 mailto:sage [04/02/22 02:55] >>382 381=385 が正解
387 名前:名無しさん@お腹いっぱい。 mailto:sage [04/02/22 16:53] >>380 ブックマークにいれますた。
388 名前:名無しさん@お腹いっぱい。 [04/03/27 17:05] [\\w$'-] これはどういうことなのでしょう? [\w$'-] ならわかるのですが..
389 名前:名無しさん@お腹いっぱい。 mailto:sage [04/03/27 17:09] >>388 処理系は何?
390 名前:名無しさん@お腹いっぱい。 [04/03/27 17:20] >>389 Rubyです Regexp::compile("\b\d[\d\.]+\d\b|[\w]+|[\\w$'-]+") scanメソッドで英文を分割してます
391 名前:名無しさん@お腹いっぱい。 mailto:sage [04/03/27 17:22] >>390 ほほう。バグってる悪寒。
392 名前:名無しさん@お腹いっぱい。 mailto:sage [04/03/27 17:25] Regexp::compile("\\b\\d[\\d\\.,]+\\d\\b") こんなのがあるんですが..
393 名前:名無しさん@お腹いっぱい。 mailto:sage [04/03/27 18:30] >>392 Ruby で "..." の中で '\' を書くときは、'\' でエスケープする必要があるの。 つまり Regexp::compile("\\w") は /\w/ と同じ。 >>390 のだと '\' のエスケープが足りない部分があるように見える。 たとえば、 "\w" は "w" に、 "\b" は "\010" になっちゃう。 ので「バグってる悪寒」と言いました。
394 名前:名無しさん@お腹いっぱい。 mailto:sage [04/03/27 18:53] >>393 なるほど、必死に\\と重ねる正規表現について調べてましたよ ありがとう
395 名前:名無しさん@お腹いっぱい。 mailto:sage [04/03/30 01:42] perl で質問です。 NOTE note "note" notes 上のような文字列を「book」だけを「note」に置換したいのですが s/\bnote\b/book/g のようにすると、ダブルクォートで囲まれているものも置換されてしまうのですが それを NOTE book "note" notes のようにするにはどう表記すればよいのでしょうか? 詳しい方、教えてください。
396 名前:名無しさん@お腹いっぱい。 mailto:sage [04/03/30 04:15] >>395 > NOTE note "note" notes > > 上のような文字列を「book」だけを「note」に置換したいのですが
397 名前:名無しさん@お腹いっぱい。 mailto:sage [04/03/30 10:07] >>396 その下の s/\bnote\b/book/g ぐらい読んで多目にみてやれ。 >>395 とはいえ、仕様があいまいすぎ。 'note' はどうする? :note: は? "abc note def" は?
398 名前:名無しさん@お腹いっぱい。 mailto:sage [04/03/30 10:29] s/ note / book /g か? >>397 > とはいえ、仕様があいまいすぎ。 んだな。
399 名前:名無しさん@お腹いっぱい。 mailto:sage [04/03/30 12:34] >>395 s/(?=[^"])\bnote\b(?=[^"])/book/g; # こんなんで良いわけないよなと思いつつ・・・
400 名前:名無しさん@お腹いっぱい。 mailto:sage [04/03/31 02:02] >>397 > とはいえ、仕様があいまいすぎ。 すいません、おっしゃるとおりです。 ある単語(note)をある単語(book)に置換したいのですが、 ダブルクォートで囲まれているもの("note")は、その置換からは除外したいのです。 > 'note' はどうする? :note: は? "abc note def" は? したがいまして、これらはとりあえず想定外で構わないので置換してしまっても構いません。 もう少し昨日の例を詳しく書きますと NOTE,note"note"notes-note このようなものでも NOTE,book"note"notes-book のようになってくれるのを期待しています。 ただ、"abc note def" これも想定外で構わないのですが 対応が可能であるのなら、私の勉強の為に教えてくださるとありがたく思います。 >>399 ありがとうございます。 >s/(?=[^"])\bnote\b(?=[^"])/book/g; これを試してみました。 基本的にOKかなと思ったのですが、行頭、行末では置換の対象となってくれませんでした。
401 名前:名無しさん@お腹いっぱい。 mailto:sage [04/03/31 02:52] >>400 補足です。 ここでいう単語とは \w+ で表せる範囲のもので、 アルファベット大文字、小文字も含めて完全に単語の 先頭から末尾までが一致するものです。
402 名前:名無しさん@お腹いっぱい。 mailto:sage [04/03/31 07:45] もっと簡単にできるかもしれないけど、 s/(^|(?<=[^\w"]))note\b|\bnote($|(?=[^\w"]))/book/g; とかは? > ただ、"abc note def" これも想定外で構わないのですが 後ろから数えた"の個数が奇数ならマッチしないようにして、 $b =~ s/\bnote\b(?=([^"]*"[^"]*")*[^"]*$)/book/g; とすれば、"のマッチングが保証できる範囲ではなんとかなるかも。 前からの"の個数でマッチさせようとしたら、 可変長のlook-behindは実装してないらしい。(perl 5.8)
403 名前:名無しさん@お腹いっぱい。 mailto:sage [04/03/31 14:53] s/"note"/hogehoge/g s/note/book/g s/hogehoge/"note"/g おれならこうしちゃうな。 考えんのめんどい。
404 名前:名無しさん@お腹いっぱい。 mailto:sage [04/04/01 01:10] >>402 ありがとうございました。 たいへん勉強になりました。
405 名前:名無しさん@お腹いっぱい。 [04/04/07 15:07] 質問させてください。 &にはマッチして欲しいのですが、&にはマッチして欲しくないのです。 どのように記述すればよいのでしょう。 お願いします。
406 名前:405 [04/04/07 15:09] &にはマッチ &amp;にはマッチしない でした。すいません。
407 名前:名無しさん@お腹いっぱい。 mailto:sage [04/04/07 15:26] >>405 Perl5 でいい?
408 名前:名無しさん@お腹いっぱい。 mailto:sage [04/04/07 15:32] >>405 /&(?!amp;)/
409 名前:名無しさん@お腹いっぱい。 mailto:sage [04/04/11 13:22] 正規表現のおすすめ書って何がありますか?
410 名前:名無しさん@お腹いっぱい。 mailto:sage [04/04/11 14:13] オライリーのやつ。
411 名前:名無しさん@そうだ選挙に行こう [04/07/11 16:49] ワイルドカード(DOS)の *.txt って、正規表現だとどう書くの?
412 名前:名無しさん@お腹いっぱい。 mailto:sage [04/07/11 20:35] {(([0-9a-zA-Z]){0,})\.txt}とか半端に返してみるテスト
413 名前:名無しさん@お腹いっぱい。 mailto:sage [04/07/11 20:46] [^\\/]+\.[Tt][Xx][Tx]\z とか (ry
414 名前:名無しさん@お腹いっぱい。 mailto:sage [04/07/11 22:41] foo と bar 両方含む行をマッチさせたいんだけど、 awkでいうところの and演算子 % awk /foo/&&/bar/ が使える、windowsで動くgrepツールなんか教えてください。 #絞込み再検索のないGUIなgrepツールなんかイラネ
415 名前:名無しさん@お腹いっぱい。 [04/07/11 23:39] >>412 ,413 . 記号は \ でエスケープになるのですね。.*\.txt でマッチはしました。 助かりました、ありがとうです。
416 名前:名無しさん@お腹いっぱい。 mailto:sage [04/07/12 22:46] >>414 FIND "foo" | FIND "bar" みたいのじゃ駄目?
417 名前:名無しさん@お腹いっぱい。 mailto:sage [04/07/14 00:51] >>414 |が使えるツールなら、/foo.*bar|bar.*foo/とかで近似できるんじゃないの。 CygwinのGNU grepで試してみた。 > cat foobar.txt foo bar foo foo foo bar bar bar bar foo > grep -n "foo.*bar\|bar.*foo" foobar.txt 4:foo bar 6:bar foo >
418 名前:414 mailto:sage [04/07/23 03:17] なるほど、andをorに展開すればいいのか。 しかし fooかつbarかつbazを検索、つーばあい展開すんのめんどくさいなぁ。 windowsのGUIなgrepツールは、サブフォルダも検索、とかできて 結構便利なのも歩けど、パイプとかorが使えなかったりしてイマイチ。 結局cygwinでawk使ってるけど、これもいまひとつメンドクサイ。 2chのログを検索してるだけなんだが_| ̄|○
419 名前:名無しさん@お腹いっぱい。 mailto:sage [04/07/29 01:12] >>418 xyzzy の ggrep 辺りがいいんじゃない?
420 名前:名無しさん@お腹いっぱい。 [04/07/30 00:18] Windows の AWKじゃだめですか?
421 名前:名無しさん@お腹いっぱい。 [04/08/03 09:48] Perloしかないべ
422 名前:名無しさん@お腹いっぱい。 [04/08/06 22:51] #から行末までをあらわす正規表現ってどうやればいいんでしょうか。
423 名前:名無しさん@お腹いっぱい。 mailto:sage [04/08/06 23:22] #.*$
424 名前:名無しさん@お腹いっぱい。 mailto:sage [04/08/12 15:32] #[^#]*$
425 名前:名無しさん@お腹いっぱい。 mailto:sage [04/08/24 00:25] 質問があります。 サクラエディタ(正規表現ライブラリ:BREGEXP.DLL)でCソース中のhogehogeをgrepしてた 場合に、コメント化(//)されている行だけは検索結果に表示したくないんですが、 どのような正規表現で検索すればいいでしょうか?
426 名前:名無しさん@お腹いっぱい。 [04/08/24 01:48] あげ
427 名前:名無しさん@お腹いっぱい。 mailto:sage [04/08/24 01:56] >>425 そのエディタよく知らないんだけど、Unix で動くの?
428 名前:名無しさん@お腹いっぱい。 mailto:sage [04/08/24 13:36] スレタイだけ見て、板を確認してないんだと思われ。
429 名前:名無しさん@お腹いっぱい。 mailto:sage [04/08/24 13:43] それを言うと、このスレ自体板違いな気もしなくはないが。ム板のだけで十分やん。
430 名前:425 [04/08/24 21:24] UNIX板って知っていて質問をしましたが。 とりあえず、ム板に逝ってみます。
431 名前:名無しさん@お腹いっぱい。 mailto:sage [04/08/24 21:38] >>430 Unix 用のソフトなの?
432 名前:名無しさん@お腹いっぱい。 mailto:sage [04/08/24 22:51] >>431 is not UNIX
433 名前:名無しさん@お腹いっぱい。 [04/08/24 23:41] 多分エディタの種類はどうでもよくて、 /\/\*.*\*\/ とか、そんな答えを期待していたと思われ
434 名前:名無しさん@お腹いっぱい。 mailto:sage [04/09/05 06:33] ム板の正規表現もとんと書き込みないから、テストしてみたら 書き込めた。ここもどうなんだか、書き込んでみる。
435 名前:名無しさん@お腹いっぱい。 mailto:sage [04/09/06 18:18] ハハ*.*ハハ
436 名前:名無しさん@お腹いっぱい。 [04/09/07 16:51] 指定文字列A 何か 指定文字列B という何かにヒットさせるにはどういう正規表現にすればいいですか?
437 名前:名無しさん@お腹いっぱい。 mailto:sage [04/09/07 17:18] >>436 素で答えると「文字列A.*文字列B」だけど?そういう話? もちろん文字列ABに特殊記号があったらどうするかとか、 .*は最長マッチでいいのとか、いろいろ細かい話はあるけど。
438 名前:436 [04/09/07 17:21] 自分で、 (文字列A).*{2,15}(文字列B) とかでやってみたんですが、 マッチするのが、 指定文字列A 何か 指定文字列B がマッチしてしまうので… 何か の部分だけを抽出しようと思ってます。
439 名前:名無しさん@お腹いっぱい。 mailto:sage [04/09/07 17:55] 後から取り出したい部分を()で囲む。(.*{2,15})みたいに。
440 名前:436 [04/09/08 01:37] >>439 さんの方法でも結果が変わりませんでした… 処理系が違うからかな? とりあえず諦めて、 指定文字列A 何か 指定文字列B をマッチさせて、指定文字列A+1文字目から 何か の文字数だけ切り取ることにします。 ありがとうございました。
441 名前:名無しさん@お腹いっぱい。 mailto:sage [04/09/08 02:28] >>440 で、その処理系が何かを晒すつもりは毛頭無いわけですね?
442 名前:名無しさん@お腹いっぱい。 mailto:sage [04/09/08 10:13] >>441 ハゲには無理
443 名前:436 mailto:sage [04/09/08 11:58] 何度もすいません。 C#です… 改めてやってみると>>439 さんの方法でいけました。 group[1]に入ってたんですね。全体しか見てませんでした。 板違いにお騒がせしました。
444 名前:名無しさん@お腹いっぱい。 [04/09/10 00:33] Perlの場合、 $_ = "いっぱい"; s/い/お/; # おっぱい s/い/お/g; # おっぱお ということでおk?
445 名前:名無しさん@お腹いっぱい。 mailto:sage [04/09/10 02:41] _ ∩ ( ゚∀゚)彡 おっぱい!おっぱお! ⊂彡
446 名前:名無しさん@お腹いっぱい。 mailto:sage [04/09/10 15:00:12] 小学生のころ流行ったネタ
447 名前:名無しさん@お腹いっぱい。 mailto:sage [04/09/27 06:28:21] 性器表現
448 名前:名無しさん@お腹いっぱい。 mailto:sage [04/09/27 09:23:16] ワロテモータ
449 名前:名無しさん@お腹いっぱい。 mailto:sage [04/09/27 11:29:59] さんざん概出なのに・・・
450 名前: mailto:sage [04/10/13 14:29:29]
451 名前:名無しさん@お腹いっぱい。 mailto:sage [04/10/13 14:50:43] .*
452 名前:ウサチャソ mailto:sage bill@microsoft.com [04/10/29 21:49:31] ↑アナルは性器じゃねーよな、とか思ってよく見ると、ドット米。 イボ痔か?
453 名前:名無しさん@お腹いっぱい。 mailto:sage [04/10/30 20:30:37] >>452 拭き忘れたウンチだよ。きっと!
454 名前:名無しさん@お腹いっぱい。 [04/11/10 15:37:24] regexp
455 名前:名無しさん@お腹いっぱい。 mailto:sage [04/11/26 21:14:34] rege*p
456 名前:名無しさん@お腹いっぱい。 mailto:sage [04/12/16 23:14:21] 正規表現で複数の単語の中に「/」があるときにヒットさせたいんですが echo "hoge / hoge" | grep "\</\>" でだめでした・・。だれか修正をお願いしますorz
457 名前:名無しさん@お腹いっぱい。 mailto:sage [04/12/16 23:50:35] >>456 条件をもっと明確に定義しろ。 マルチすんな。
458 名前:456 mailto:sage [04/12/17 00:16:01] >>457 複数の単語の中で、"/"のみで構成される単語が存在する場合のみ ヒットさせたいのです つまり a b c / d 上記ようなときで下記のどの事象にもヒットさせたくはないのです // /a a/ a/a
459 名前:名無しさん@お腹いっぱい。 mailto:sage [04/12/17 01:22:18] >>456 pc5.2ch.net/test/read.cgi/linux/1101654885/957 とこっちと、どっちで続けるのかね。
460 名前:名無しさん@お腹いっぱい。 mailto:sage [04/12/17 11:17:13] まことに勝手ながらこちらで続けさせてください 質問を改めます やりたいことは ----------------------- 1) echo "/" | grep ...... 2) echo "/ a b" | grep ...... 3) echo "a b /" | grep ...... 4) echo "/a / b/" | grep ...... ----------------------- 上ですべてマッチさせて 以下はすべてはじくようにしたいのです ----------------------- 5) echo "//" | grep ...... 6) echo "// /// ////" | grep ...... 7) echo "/a b/ /c/" | grep ...... ----------------------- 上と下の違いは、前後にスペースを含む" / "が存在するか否かです よって以下のように考えましたが、ヒットしませんでした echo "a / b"|grep "\</\>" echo "a / b"|grep "\<\/\>" どなたか修正をおねがいしますorz
461 名前:名無しさん@お腹いっぱい。 mailto:sage [04/12/17 11:22:35] >>460 grep と言ってもいろいろあるんだが どの OS のどの grep よ。