sed
そもそも、EUCはそういうツールで不都合がないようにということで作られたわけで。 日本語独特の文節や漢字などに対応しない、というのはあるけど。 <space> ってそのまま打ってるってオチだろw 急に Windows 7 64 bit で ssed が使えなくなっま。 tab8のテキストをインデントを崩さずに半角スペースに置き換えるにはどうすればいいですか? エスパーすると質問者は手段はsedじゃなくても良いと考えてる >>410 それなら「expand -8相当の処理をsedでやるには?」って聞くでしょ。 >>414 expand を知らなかった、という可能性は。 >>415 というかexpandを知らなかったからこそ 「tab8のテキストをインデントを崩さずに…」みたいな まわりくどい言い方で聞いたんでしょ。 だからsedに関係なくexpandを回答すれば回答として十分。 >>416 expandを知らないけどsedを使わなければならない理由があるんだよ! すっごく登場しにくくなったけど>>415 さんが正解です。 >>409 エスパーさんありがとう。 皆さん混乱させてスイマセンでした。置き換えと言えばsedしか知らなかったので。 文字列unkoの行を見つけてから文字列chinkoの行まで表示 ってどうやればいいの? >>420 当たり前過ぎるから回答は控えるけど、 エスパーすると -n オプション忘れて全部の行が表示されてしまったってオチだろな そんなことなくてその当たり前すぎる内容がわからない初心者さんなんでしょう。 回答してあげないなんてひどいね >>421 あ、-n だけのことだったんですね。失礼しました。 >>422 そこまで初心者じゃないです。 初心者の土瓶口だけど、chinkoの前の行まで表示 ってのはできるの? >>425 /start/,/end/{/end/!p} >>426 いや、それは知ってるよ。 そういうことせずに直接○○の行の手前まで指定はできないのか聞いてるんだが >>428 startを含まず、endを含む場合 sed -n '1,/start/b; 1,/end/p' みんな1行野郎なの? スクリプトファイルは書かないの? >>430 スクリプト書くほどならperlで書いちゃう perlは英語のマニュアルが読めなくて挫折した。あんときperlがんばっとけばよかったorz DTPでテキストの整形するとき、いっぱい痴漢(←なぜか第一候補)するよ。 >>432 俺はPerlは書籍で覚えたな、ラクダとあと何かUnixツールとして使うための本 教えてください! テキストファイルの最後にある空行を削除するにはどうすればいいですか? $ sed -n ' 105,$p' Ga.inp search.LowerE -3.000 # default=-3.000 (Hartree) search.UpperE 20.000 # default=20.000 (Hartree) num.of.partition 1200 # default=300 matching.point.ratio 0.67 # default=0.67 の様に、最後に無駄な空行のあるファイルがたくさんあって、一括削除したいのです。 ただし、途中にある改行は、ファイルの見やすさのために残しておきたいのです。 ed で言えば $;?^.?;+,$d で出来ると思うのですが、sed では';'や'+'が使えず、どうしてよいやら・・・ パターンスペースが 空行だったらホールドスペースに追加 空行でなかったらホールドスペースを出力後にパターンスペース出力 最後の連続空行はホールドスペースに収まったままで終わる。 とか考えてみたがあってるだろうか。 Nコマンドを使っていて必要な最期の行を全部すっとばしたことが、私にもありました >>437 多分やりたいのはそれだと思います。 具体的に同書けばいいのでしょう? もうawkかなにかで済ましてるだろうけど練習 437とは違うやり方になった sed -n -e ' :loop /^\n*$/{ N b loop } p ' >>440 ありがとうございます! うまくいきました。 gsedですが、 ブラケット開きがあって、ブラケット閉じ以外のものが1つ以上あって、ブラケット閉じがある場合、 で、これどこがおかしいのでしょうか? ★☆が現れてくれないんですけど。 s/\[\([^\]][^\]]*\)]/[★\1☆]/g >>442 バックスラッシュが余計 sed 's/\[\([^]][^]]*\)]/[★\1☆]/g' ありがとうございます。 つまり、[ と ] の間にあるものはどんなものでも 「これは文字です」と宣言しなくてもいい(\が要らない)ということですか。 やってみます。ありがとうございました。 >>444 そうなんだけど、] の場合は、[^ の直後にある場合のみ 普通の文字の ] とみなすという仕様。( [ の直後でも同様) テキスト [aaa], [bbb] <あああ>の(アアア)と<いいい>の(イイイ) 欲しい結果 ★aaa☆, ★bbb☆ ★あああ☆の★アアア☆と★いいい☆の★イイイ☆ s/[<[(]\([^<>[]()][^<>[]()]*\)[>])]/★\1☆/g 予想はしたけど、まるで反応してくれません。 半角の約物3種類は欲張ったかなあ、と1つずつやってみているところです。 >>446 >>445 に書いてあること読めよ。 [^ の直後に ] を置かないと、普通の文字としては認識されないんだよ。 [^....] の中の .... の順番を変えろということ。 >>446 s/[[<(]\([^]<>()][^]<>()]*\)[]>)]/★\1☆/g >>447-448 ああ、すみません。言葉が足りませんでした。読んだ上でわざと変えてみたのです。 ごめんなさい。>>446 は[]の中の[]に全部\を付けたつもりでした(このミスが大元ですね) エスケープすればどの位置にあっても文字とするというsedを使っていたのと、 最長一致の正規表現も使っていたので混乱してしまいました。 「直後」を何度も言われていたのに、「直後『だけ』」に思いが至りませんでした。 gsed で、置換コマンドの s を間違えて a と入力したスクリプトを実行したら、 一行ごとにその行が挿入されていて笑ってしまった。 a コマンドなんて知らなかったわ。 gsed って置換するときにタグの数が合ってなくてもエラーが出ないのね。 質問があります テキストファイルaaaの中身 <hoge> abc </hoge> <hoge> def </hoge> これを <hoge> def </hoge> のようにabcのタグだけ削除したい sed -i "/^<hoge>\n abc\n<\/hoge>/d" aaa これでは削除できませんでした。 改行を含む文字列を削除する場合どうしたらいいでしょうか? cat aaa | sed -e ':loop; N; N; !b loop; s/^<hoge>\n abc\n<\/hoge>//' これで良いのかな? >>459-461 ありがとうございます しかし削除できませんでした ちなみにsedじゃなくて何でやったほうがいいでしょうか? >>463 はい。ありがとうございます。できればシェルスクリプトで書きたいので PerlでもRubyでも何でもいいとは思いますがそれ以外でいいコマンドはありませんでしょうか? grep -n abc して、出てきた数字でsedスクリプト作っちゃうとか。 >>464 シェルスクリプトから呼び出せば良いんじゃないの? sedだって所詮は外部コマンドだし。 >>482 sed -n -f hoge.sed <aaa hoge.sed: /<hoge>/b hoge p b end :hoge N N /<hoge>\n abc\n<\/hoge>/!p :end >>458 aaaがXMLならXMLパーサ(を使える言語)を使った方がいいと思う /<hoge>/!b :loop $b last /<\/hoge>/!{ N b loop } :last s/<hoge>[ \n\t]*abc[ \n\t]*\(<\/hoge>\)*//g すみません。教えて下さい。 テキストの最終行のあとに空白行を1行入れる、というのはどう書くのでしょうか。 iコマンドでは最終行の前に空白行ができてしまいます。 最終行の後なら $ cat >> tmp $ で十分であるようにも思うけどなぁ ああ、なるほど。いつか思い出して使うこともあるでしょう。ありがとう。 そうなんだけど、sedファイルの中に書き込みたかったんですよ。でも、ありがと optimized sed http://www.commandlinefu.com/commands/view/11707/optimized-sed 巨大ファイル対象の場合は sed '/foo/ s/foo/foobar/g' <filename> が sed 's/foo/foobar/g' <filename> よりも効率がよいとの事ですが、どういう原理でそうなるんでしょうか "foo"の在る行だけを対象にするから? どのみち見つけに行くんだから同じじゃん?と想ったり想わなかったり >>476 100万行のテキストファイル、GNU版のsedで試してみたけど どっちも変わらなかったぞ つまり、都市伝説って事か どのsedかによっても違うんだろう 1億行、954MBのファイルでやってみた $ seq -w 100000000 > large.txt $ sed --version | head -1 sed (GNU sed) 4.2.2 $ grep '111' large.txt | wc -l 549739 $ for i in {1..3}; do time sed 's/111/999/g' large.txt > /dev/null; done sed 's/111/999/g' large.txt > /dev/null 28.68s user 0.77s system 80% cpu 36.731 total sed 's/111/999/g' large.txt > /dev/null 28.75s user 0.68s system 82% cpu 35.666 total sed 's/111/999/g' large.txt > /dev/null 27.99s user 0.61s system 81% cpu 35.067 total $ for i in {1..3}; do time sed '/111/ s/111/999/g' large.txt > /dev/null; done sed '/111/ s/111/999/g' large.txt > /dev/null 27.68s user 0.63s system 82% cpu 34.418 total sed '/111/ s/111/999/g' large.txt > /dev/null 27.96s user 0.72s system 57% cpu 49.912 total sed '/111/ s/111/999/g' large.txt > /dev/null 28.84s user 0.71s system 81% cpu 36.287 total >type diff diff is /usr/bin/diff > type diff | sed 's,[()],,g;s,^[^/][^/]*,,;q' /usr/bin/diff s,[()],,g;s,^[^/][^/]*,,;q' ってどう解釈すれば良いんですか? Macでgsedを使っています。やりたいこと ★のある行と☆のある行の間にある行のうち、ひらかなを含む行の行頭に@を付ける。 (ひらかなが1文字でも入っていれば良い) /★/,/☆/{ /[あ-ん]/s/^/@/ } 無視されてしまうんです。助けてください。 [あ-ん]がいけなかったみたいです。[あいうえお(中略)ん、。]でできました。 >>484 ぽーつ使ってるならssed入れてpcre環境にすれば\p{Hiragana}とか できるんじゃね ssedって次期GNU sedのこと。 GNUのページでもこの拡張には依存するなって書いてる。 ただ、macでBSD系のsedじゃなくGNU sed使ってるんなら port依存って意味ではあんまり変わんないんじゃない? >>334 横から&亀だが sed '/pattern/ { '"`sed 's/^/i\\\\\n/' <file`"' }' gnuWin32のsed version4.2.1です sedで、"を入れたくて下記のようにしたのですが、うまくいきません。どうしてでしょうか sed -e "s/^/ \"/" hoge.txt > hoge2.txt エスケープの\がうまく利かず、 sed: >を読み込めません というわけわからんエラーメッセージが出てきます ちなみに、 sed -e "s/^/ \\/" hoge.txt > hoge2.txt とかならちゃんと動きます >>491 UNIX板で答えない方が良いのかもしれませんが、適当なスレが無さそうなので windows のコマンドプロンプトで実行しているとして答えます。 cmd.exe の仕様が原因と思われる sed -e "s/^/ "^""/" hoge.txt > hoge2.txt sedを使用する際の注意事項があります。 コンピュータのCPUが何ビットであるか調ベておく事が大切です。 32ビットCPUを搭載したコンピュータには、 32ビット用のsedをインストールすること。 64ビットCPUを搭載したコンピュータには、 64ビット用のsedをインストールすること。 これを間違えれば正常にsedが動作しません。 sedの使い方がわからず、試行錯誤しているのですが、うまくいきません。 行の先頭に特定の文字列(たとえば"abc")があったらその行を丸ごと"xxxxxxxxxxx"に置換するにはどうすれば良いでしょうか。 例: abc123456 が xxxxxxxxxxx に変換さえるイメージです。 >>494 sed -n /^abc/p sed s/^abc.*$/xxxxxxxxxxx/ パイプで使うバージョンを書く |sed 's/^abc.*/xxxxxxxxxxx/' abc -> xxx abc123 -> xxxxxx abc12345 -> xxxxxxxx をsedでやるならどう書くんだろ read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる