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