1 名前:正規表現 mailto:正規表現 [02/12/06 18:09] 正規表現
341 名前:名無しさん@お腹いっぱい。 [03/10/12 16:53] vimで"DEL"という文字列が含む行で、"DEL"以下を削除したい場合はどうしたらいいでしょうか?
342 名前:名無しさん@お腹いっぱい。 mailto:sage :s/DEL.*$/ [03/10/12 17:15] スレ違い。 Vim6 Part6 pc.2ch.net/test/read.cgi/unix/1058706125/
343 名前:名無しさん@お腹いっぱい。 [03/10/13 01:12] :%s/DEL.*//
344 名前:名無しさん@お腹いっぱい。 mailto:sage [03/10/13 15:10] >>343 サンクス、すみません。
345 名前:名無しさん@お腹いっぱい。 mailto:sage [03/10/18 17:51] ☆
346 名前:名無しさん@お腹いっぱい。 [03/10/21 23:12] >>343 DELは残したい場合はどうすればいいですか?
347 名前:名無しさん@お腹いっぱい。 mailto:sage [03/10/21 23:24] :%s/DEL.*/DEL/
348 名前:名無しさん@お腹いっぱい。 [03/11/05 11:20] MS-DOSが使われていた頃に、"mifes"と言うエディターが有った。 そのマニュアルに1頁ほどの正規表現の説明があって、自分は最初に、それで 覚えて使い出した。 使い始めの頃は、何回も間違えたけど、少しづつ慣れてきた。 自分の周りを見ても、プログラマを何年もやっていても正規表現を知らない 人は、結構いる。 一旦、覚えてしまうと非常に便利だと思うんだけど。
349 名前:名無しさん@お腹いっぱい。 [03/11/05 17:48] 正規表現で俺の存在を抹消してくれ。
350 名前:名無しさん@お腹いっぱい。 mailto:sage [03/11/05 19:01] s/俺の存在//g;
351 名前:名無しさん@お腹いっぱい。 mailto:sage [03/11/05 20:10] gsub!(/俺の存在/, "")
352 名前:名無しさん@お腹いっぱい。 mailto:sage [03/11/18 18:31] 捕手
353 名前:名無しさん@お腹いっぱい。 mailto:sage [03/11/19 01:38] rー、 」´ ̄`lー) \ T¨L |_/⌒/ `レ ̄`ヽ〈 | i__1 _ゝ_/ ノ L__jイ´_ ) | イ | ノ--、 r'⌒ヽ_ ゝ、___ノ二7 /´ ̄l、_,/}:\ |ーi | l_/ /__ィ::. ゝ~_ィ´:; ,ゝ __〉 { (T´ |1:::. \_>、};;_」 'ー‐┘ ! ` ̄''ァ一 、\ ヽ} ← 保守 〈` ̄ ̄^`¬ノ .::〔 ̄´ 1 ヽ .:::レ ヽ、 |_イー-、_;;j|_:. ゝ、 __,,,... -- |. {―――‐フゝ、 〉 -- ...,,,__ _,, -‐ ´ ,r|__ト, 1ニノ ー'´ ` ‐- ,,_ , ‐ ´ └―'´ `
354 名前:名無しさん@お腹いっぱい。 mailto:sage [03/11/19 09:17] >>353 それ捕手じゃなくて投手やっ!www
355 名前:名無しさん@お腹いっぱい。 mailto:sage [03/12/04 19:24] 別のスレからの引用 ps ax |grep '[s]shd' とやると、grep自身の行にヒットしないそうだけど、なぜ? sってメタ文字でもなんでもないのに。
356 名前:名無しさん@お腹いっぱい。 mailto:sage [03/12/04 19:30] なぜって言われても、自明だが。
357 名前:名無しさん@お腹いっぱい。 mailto:sage [03/12/04 19:33] grep sshd と何が違うの?
358 名前:名無しさん@お腹いっぱい。 mailto:sage [03/12/04 19:35] あ、ごめん、わかった(w
359 名前:名無しさん@お腹いっぱい。 mailto:sage [03/12/04 19:36] grep sshd だと、ps の出力に含まれる "grep sshd" の "sshd" がマッチする。 grep '[s]shd' だと、ps の出力には "grep [s]shd" が含まれるが、 この "[s]shd" は、[s]shd にはマッチしない。よね?わかる?
360 名前:名無しさん@お腹いっぱい。 mailto:sage [03/12/04 23:59] なるほど。トリックだな。
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 で、その処理系が何かを晒すつもりは毛頭無いわけですね?