sed
>>233 ほれ、解答だ ↓ sed -n '${p;q};:s; N;s/ccc\nbbb/ccc\nddd/;P;D;b s' >>234 sedじゃなくてもいいですけど、置換できますか? >>235 エラーがでました。 extra characters at the end of q command >>236 俺のところではエラーにならないけどな。 わかりやすいように改行を入れるとこんな感じ ↓ sed -n ' ${ p q } :s N s/ccc\nbbb/ccc\nddd/ P D b s' sed -n '${p;q;};:s;N;s/ccc\nbbb/ccc\nddd/;P;D;b s' sed -n "m(_ _)m|-_-|(っ゚ロ゚)っ" sed: 1: "m(_ _)m|-_-|(っ゚ロ゚)っ": invalid command code m ( を に痴漢したいんだけど $ cat hoge | sed -e "s/\\\(/ /" ってやってもなんか駄目っぽい なんで? >>245 シングルクォートならどうよ? $ sed -e 's/(/ /' hoge sedはバックスラッシュいらない。 グループ化したいときはいるけど。 >>246 シングルクォートならできるんだけど、なんかこう どうしてもダブルクォートでやりたいお年頃なんです ある単語(例:foo)をhoge-" と置換したいんですが、 sed -e "s/foo/hoge-"/g" だと当たり前だけどエラーが出ます・・・。 ダブルクォートとかって、どうやって指定したらいいんでしょう? >>251 おお!ありがとう!!できましたヾ(゚∀゚)ノ しかし>を認識しなくなってリダイレクトが使えなくなった・・・。 Winに組み込んだSedだからなのかなぁ・・・。 winのコマンドラインパーサーは腐っているから-fで渡したほうが精神的によろしい。 お邪魔します^^ あのスレの>>144 さんありがとうございます 私の目標と現状を書いておいたほうが良いのかな ★Aタイトル一覧表を作る(”タイトル”の部分はそれぞれ対応したファイルにリンクを貼る) ★Bタイトル一覧表に対応したデータファイルをタイトルの数だけ作る 但し★Bを作成する前に全てのデータを1ファイルに集約した後ソートして 重複チェック、データ欠如のチェックしたいです ・データファイルはPC内にある既存のファイルから必要な部分を抽出して作成する ●必要な部分● @<title>〜</title>(元ファイルは1行の場合と2行なたは3行の場合がある) A<object 〜 /object>(元ファイルは1行の場合と2行なたは3行の場合がある) B<span>〜</span>(備考欄に使おうと自分で全てのファイルに付け足しました現在はタグだけです) (元ファイルから抽出と新規作成にタグだけ付け足しても同じ内容になります。どちらでも構いません) 他のところで教えてくれた方が居て★Aの作成と、★Bの@ABの個別取得できています ★Aの一覧表からテスト作成のリンクファイルに飛ぶことも出来ています ★Bのデータファイルを作れないで居ます 私のレベルなんですが他の言語スレで呆れ返られるくらいの初心者で 単語の名前や意味は殆どわからないです 結局、自分のやりたいことはファイル操作であることが最近知りました それまでの経緯でHTMLとジャバスクリプトと正規表現の本 それからperlの本は自宅にあります sed全くわかっていないです^^; 単語の意味がわからない事だらけで意味を調べて廻る事でせいいっぱいで なかなか前進しないままです とり急ぐわけではないのですが もしよろしければお時間の都合の良いときだけで結構ですので教えて頂けましたら幸いです どうぞよろしくお願い致します >>ALL Win版のsedの話なんだけど、sedスレがUNIX板とLinux板に しか無いので誘導させてもらったけどいいっすか? >>254 PerlやJavaScript(JScript)がわかるなら、そっちでやったほうがいいね。 マッチングさせたい物が1〜3行に渡るって所でモレにはわからん。 できるかもしれないが複雑になるような希ガス 144さん ありがとうです お声かけて頂いただけで嬉しかったです まだ解説本を購入して10日程です 全部読んでいないのでどこまでできるかわかりませんが 自力でもう少し頑張ってみます 本当にありがとうございました^^ お疲れのところすいませんでした よく流れがわからんが やりたいこと全部を一気に教えてもらうとかせずに 知りたいポイントをしぼって一つずつ質問すれば答えてくれると思うよ。 各板で暗黙のルールみたいなのがあるんだろうか やりたいことは先に書いた通りなんだけど プログラム板というところで初めはHTMLの読み込み方を聞いてみたんですよ そしたら「何がやりたいのかよくわからん。もっと詳しく。」ばかりレスが付くんです それで私が「ファイルの読み込みです」と返事をすると「具体的にここに書かないとわからない」 これを繰り返しているうちに「後出し条件だ」とか「それはプロにしか出来ないレベル」とか 結局何も返答しないのに威張ってばっかり。 まるで解答者(のフリをして答えない)人の相手をするばかりで全く進まない 解答者らしき人を問い詰めていったら 私のような人間を探してネタをパクッタリいい人を装いながら客として誘導したり 最初から教える気は全く無いって事でした。無駄な時間ばかり過ぎていくので 板を変えてプログラマー板ってとこへも行ってみたのですが そこでも「もっと具体的に」「わからん全部書け」「質問以前に問題あり」 散々小ばかにされては解答は無し。 やはり同じような輩が蔓延っていました 2chで教えて貰おうとするのが間違っているのかもしれません 自分は今までパソコンソフトには全く興味が無かったので こういう汚い連中が露骨に威張り倒してるところがあるとは知りませんでした 他の板でもひどい言葉はよく見かけますが 大体はまともな意見が多いので誰かがフォローしてくれたりしますが パソコン関係は解答者が圧倒的に優位なようだ 「只で教えてるんだぞゴルァ」とかも言われました(一度も解答しない人にw) 只で教えたくないならスルーでいいのではと言い返したら 質問者としてなって無いとか言い出す始末 そういうことでまとめて書いておいたんです 解答者の振りをする連中は答えないのに質問者をいじって遊んでるんです でわ うわぁ…これはひどい。 書き込む前に自分のレスを読み返してないのか? 全然まとまって無いし、誤字脱字だらけ。 スクリプト書く前にやりたい事を 簡潔な日本語で書く練習をした方が良い。 いや、マジで。 >>258 暗黙のルールという訳じゃないけどできるだけ楽して、人から聞きだそうという態度の人は煽られるね。 あなたにそういうつもりは無くても例えば、せっかくこのスレまで誘導したのに、 >sed全くわかっていないです^^; >もしよろしければお時間の都合の良いときだけで結構ですので教えて頂けましたら幸いです これだけ見ると、1から10まで教えろって言ってるように見えるよ。 色々なスレを見ればわかるが、質問をして、あなたのように煽られる人と、 煽られない人がいるが、その違いがわからないのであれば、 「2chで教えて貰おうとするのが間違っているのかもしれません」という事。 みんなレスありがと 答えてくれたことにお礼を言うのは当たり前だと思うんだけど 今までのスレは答える前から上から目線で結局答えてくれない この人たちは解答を知らないのでは?と思うようになったんですよ 昨日も私が質問しているように見えるので他の質問に答えれないだろ あの質問もお前だろって言うので 「それ自分じゃないよその質問には答えてあげればいいよ」とかやりあってたら その質問者が現れた 当然のように解答者にはペコペコ謝ってる(これからも解答してもらうために) この先、解答は期待できない私には一言もなし 初心者用の解説本をヨンから来いと言われるんだけどファイル操作は初心者用ではわからないようだ 手持ちのperlは3冊ある(超初心者用、初心者用、命令逆引き辞書) perl解説本ではファイル操作の解説に至るまでにCGIの解説ばかりだ やっとファイル操作の解説まで読み進めたら5ページほどで終わってるorz perlでファイル操作は中級レベルの解説本を買わなければいけないのかと思うようになった 他の言語を調べてみた CとかjavaとかAjax 初めのほうからファイル操作は解説している ただ解説に使っている言葉自体が命令を使って解説しているので自分には全く理解不能だorz >>262 それ以外にも軽く10スレ以上は廻ったよ それで何か言語を覚えなきゃダメだなってわかったんだ 結局、私の言いたかったのは答えれないのに答える振りしてまで 優位に立ちながら出てこなくてもいいのではないのかってこと どうせ答えないのにいかにも「解答欲しけりゃぺこぺこするのは当たり前だろカス氏ね」的な態度とって それで解答しなくても解答者を装ったほうがいいってことなのだろか 何もわからないことまでしゃしゃりでてこなくてもってことです 偽解答者なら私でも今からすぐにできそうだw ちなみに某スレでdieがわかんないような逆引き辞書だよ って記載した後に解説本に載ってたサンプルが動かなかったので なぜエラーになるのかわからないって書いたら 難しいことには答えない でも何か答えなければって強迫観念でも沸き起こるのか 解答者を装いながら勉強するのも手段なんだろうけど なにがなんでもしゃしゃり出てくるのは過疎っているからだろね 悪循環板だ >>261 の意味がわからないようだね。 >何もわからないことまでしゃしゃりでてこなくてもってことです あんたが自由に質問をしていいように、他の人間もそれに対して自由にレスを付ける事ができる。 「わからないなら、しゃしゃり出てくるな」というのは単なるあんたの都合でしょ? そうでなければ、そいつらを自分より低レベルだと見下したいのか。 そういう事をされて、このスレでクダを撒き、関係の無い人に八つ当たりをしているあんたは、 そいつらと同類という事に何故気付かない? もう一つ。「自分」と「2ちゃんねる」のやり取りだと思っているようだけど、 レスをしているのは「個々の人間」だ。 あれだろ、渋谷までいきたいんですが教えてください。 って質問して 電車で、とかタクシーで、とか徒歩で、とか教えてくれてるのに 切符の買いかたがわかりません、とか タクシーって何ですか?とか 徒歩って何って読むんですか?とか 馬鹿な質問してるから飽きれられてるんだろ。 人生相談ならよそでやってくんないかな。 sedと関係ない。 >>263 >それで何か言語を覚えなきゃダメだなってわかったんだ わかったけど勉強する気が無いわけ? 次から次へと言われるがままにPerl、JavaScript、サクラエディタ、awk、sedと 目先で楽できそうな物を追っかけてるから目的が達せられないんだ。 >初心者用の解説本をヨンから来いと言われるんだけどファイル操作は初心者用ではわからないようだ 参考書として勧められてない「独習Perl」が手元にあるが丁度半分まで読んだ所で扱われているが。 努力をしないで結果を得たいなら、それなりの報酬を出して人を募集するか、 質問専用掲示板で、具体的にサンプルを出し、これこれこーゆースクリプトを 書いて下さい、と依頼するかのどちらか。 http://okwave.jp/ 何いきまいてんの? パソコンソフトって結局ゲームソフトみたいなもんでしょ その操作を知ってるからって威張るもんじゃないよね 自分で作ったソフトじゃないんだから ゲームソフトの使い方だったら攻略本としてでるんだろうけどね ソフトの使い方を先に知ったからって偉いと思ってんならスルーすればいいじゃん メモ帳やペイントみたいなもんで使い方覚えたらどってことないと思う いざやり始めた人間をいじくって遊ぶなんて恥ずかしいね やぁやぁ我こそはsedの達人なり〜〜 そやって表歩いてみ 誰か「キミ凄いんだ」と声でも掛けてくれたらいいねw 我こそはプログラマーなり〜〜〜〜腹いてー 高校、大学と印刷関係の工場でバイトしてたんだ 当時職人と呼ばれる連中はタバコくわえながら あごで指図しては怒鳴りあげたりやりたい放題 その頃何も知らなかったので「○○さん技術あるから仕方ないよね」みたいな空気があった ん? ちょっと待て! 機械の操作だけじゃん 今や家庭用のプリンターでも当時の技術を遥かに超えている 車にの運転とかもそうだよね 昔は女性が免許持って運転してると目立つしなんかあったら「女の運転わ・・」とか言われたもんだ 今の乗用車の性能で言えば当時のレーサーを余裕でぶっちぎれますw そんな感じで機械やソフトを開発してるのは偉いと思うけど 操作で自慢されても5年後にはもっと簡単で3日でものになるソフトが出てるかもしれないよ あらら、自分の非を指摘されて、それが正しいもんだから逆切れしちゃった訳ね。 まともに反論できないからって、お前の母ちゃんでべそーは無いよな(笑) 自分で作ったソフトでも無いのにw 使い方知ってるくらいでそこまで威張るか普通? そんなことぐらいで天狗になる奴リアルではいないよw ゲームの上手い子供が威張り倒してるのとどう違うんだ??? パソコンソフトの使い方ぐらいでこんなに意地になる連中マジで知らんわw 教えたくなければ知らん顔してればいいのに何が何でも答えるんだね(解答以外はwwwww) 多分、実社会でもずれてんだろなー キミはた迷惑だと思われてるかもしれないよw 廻りよく見てみw おもちゃを上手く使いこなせたから自慢してるって程度じゃないな 頭小学生並みの幼児性w 上から目線が笑えるw こいつ 奴 プ 笑えるwww 言葉遊びできない奴は何やってもダメって典型 これほどの逸材を埋もれさせておくのはもったいないから age とく これは壮大な釣りなのか? 一瞬、なりすましを疑ったが、>>262 ,282を見ると、まさに本人だよな。 sedって文全体からある語句を置換するのは簡単だけど、 最初にマッチする語句だけ置換して後はそのまま出力しようとするとちょっと複雑になってしまうよね。 スクリプトの先頭に戻らない様なループを作らないといけない。 >>284 遠まわしに「最初にマッチする語句だけ置換をする簡易な方法はありませんか?」 って聞いてるのか?それとも独り言ならチラ裏へ。 % ( echo hogehoge; echo hogehoge ) | sed '0,/hoge/s/hoge/fuga/' fugahoge hogehoge GNU sed に限るようだが。 >>286 レスサンクスです。ただ最初の0を1でやった場合はうまくいきませんでした。 s/hoge/fuga/ :loop p N s/.*\n// b loop 漏れの頭ではこんなのしか思い付きませんでした。 もっとスマートな方法があったら教えてください。 >>287 /hoge/{ s/hoge/fuga/ :loop n b loop } n文字目のxのみyに置換というのはどうすればいいですか n文字目のxとは、 行頭から(n-1)個の文字のあとに出現するx のことか? 行頭からn回目に出現するx のことか? >>291 後者ですが、念のため両者の場合について教えてください 行頭から4文字目のxをyに echo xxxxxxxxxx | sed 's/^¥(...¥)x/¥1y/' 行頭から4個目のxをyに echo x-x-x-x-x | sed 's/¥([^x]*x[^x]*x[^x]*x[^x]*¥)x/¥1y/' とかとか? 4を変数にするのは漏れには粍 ありがとうございます 確かに.×4みたいに表現できたらかっこいいですが これで文句なしです! >>297 ×4は無理っぽい。 echo x-x-x-x-x- | sed 's/\(\([^x]*x\)\{3\}[^x]*\)x/\1y/' 01101,"0600031","ホッカイドウ","サッポロシチュウオウク","キタ1ジョウヒガシ","北海道","札幌市中央区","北一条東",0 ↓ 01101,"0600031","ホッカイドウ","サッポロシチュウオウク","キタ1ジョウヒガシ","北海道","札幌市中央区","北一条東",0 この第5フィールドの半角英数だけ(2個有る場合もあり)全角にしたいのですが どのようにsedを作ればいいでしょうか? >どのようにsedを作れば 釣りポイントはここですか? その形式は、郵便屋の郵便番号データだろ。 エクセルか何かの一覧表をcsvに落としただけの代物だから そのままでは役に立たないよ。 そのままDBに格納し、専用プログラムで変換かけて正規化してる。 aaa.hoge bbb.hage ccc.foge とかいう文字列があって、*.hoge以外にマッチする正規表現って出来るのでしょうか? >>303 その文を素直に読むと、当該文字列にだけはマッチしない 正規表現と読めるが、書き込み子の心情を忖度すると、 sed 's/[a-c]{3}\.hoge/==matched==/' って事かな? まあ、[a-c]* でも、(aaa|bbb|ccc) でも、[[:alpha:]]* でも、 マッチする表現は無数に有るけど、(・・に、だけマッチする) を、求めているなら、そもそも*.hoge って見当外れだし、 要するに、何が知りたいのか良く分からん。 >>305 > >>303 なるほど、ありがとうございます。 ファイル内の、スペース+改行をスペースのみに置換したいのですが、 どのように記述すればよいのでしょうか。 データ数が数十万行あるため、ファイルを全部読み込んでから 置換する方法では、容量がオーバーしてしまいました。 >>307 Perl か何かで書いちゃった方が早いんじゃね? >>308 環境上、Perlを使用することができないんです。 sedでは難しいでしょうか。 環境によって違うと思うけど普通の書き方じゃダメなのか? s/ \n/ /g >>310 自分の環境では、\nが認識されませんでした。 >>311 OSの具体的な名前とかは出さないのな。 s/\ / /g では? すまん。勘違いした。 sed はPerlと違って、入力したときに改行を取り除いてからパターンスペースに送るから、 そこで改行探しても見つかりっこない。 んで、出力時に自動的に改行は付くし、これを抑制する手段はない。 せめて awk使っとけ。Perlなくてもawkはあるだろ。 すまん勘違いしてた。 sedはPerlと違って入力時に改行を取り除くから、置換時に改行探したって見つかりっこない。 Nとかで次の入力を読んでくれば間に挟まるけど。 ありがとうございました。 sedでは難しそうですね。別の方法を探してみます。 良く読んで赤面しろw >>318 >>307 「スペース+改行をスペースのみに置換したい」 >>307 sed ' :again / $/{ N s/?n// b again } ' sedの公式ホームページってないのでしょうか awkは一応gawkがあって一応開発も続いているようですが sedはどのような状態なのでしょうか? いつまでたっても最短マッチを搭載しない理由もお教えねがいます。 そういう機能を追加すると、既存のスクリプトが動作しなくなるから。 ポータビリティを失ってまで実装する必要がない。(それこそ、perlでもawkでも使えばいい) なるほど、参考になりました。 もし開発に参加できるなら参加したいと思っていたのですが そのような理由ならそういったときはperlやawkに頼る事にします。 >>322 sedに正規表現perl互換モードを搭載すればいいだけなのにね GNU sedの-r みたいなので、perlモードがあればいいね。 >>321 gnu sed 拡張している人たちがいるからそのあたりに乗ってみれば? onigsedじゃダメなのか? つーか、perl -pe でいいじゃん。 質問させてください。 sedでホワイトスペースを解除または増やす方法ってあるのでしょうか? sedで、 /pattern/r file ってするとマッチした行の次にfileの内容が出力されますが、 その行の前に出力する方法はないでしょうか? ちなみにマッチする行は1個しかありません。 sed -n -e '/pattern/r file' -e p ごめん、ダメだった。こっちで。 sed -n -e 'x;p;g' -e '/pattern/r file' 1行目の空行は無視して 1行めの空白はもう1段 | sed 1d で消せるけど…… 入力の最後の1行出てなくない? 出てなかった。 sed -n -e 'x;p;g' -e '/pattern/r file' -e '$p' という感じで最後の行を出力することは出来るけど patternが最後の行の場合だけ、fileの内容が次行に出ちゃう。 自分はギブアップ いろいろありがとうございます。 sed 1個では難しいようですね。 patternより前とpattern以後に別けて、 間にfileをcatするしかないのかもしれません。 sed 2個ならなんとか sed -e '$aEND' | sed -e ' $d /pattern/{ r file N } ${ P d }' >>295 の例に似てますが、 バイナリファイル(1行めの)4バイトめを ASCII 文字 0x02 -> 0x03 に 変更するにはどうすればいいでしょう? # sed -e '1s/^\(...\)\x02/\1\x03/' in > out ではだめでした。 試した環境は FreeBSD 7.2 です。 >>341 (dd bs=3 count=1; dd bs=1 count=1 of=/dev/null; printf '¥003'; cat) < in > out >>341 sed -e "1s/^\(...\)^B/\1$(printf '\03')/" でできんかね。^BはC-v C-b入力できるはず。 >>343 最初の3バイトに改行文字がない保証がないから一般的にはだめそうだな。 やっぱ行指向のsedでバイナリファイルを操作するのは無理があると思う。 \x02 などは GNU sed の拡張仕様でした。 # pkg_add -r gsed # rehash # gsed -e '1s/^\(...\)\x02/\1\x03/' in > out でできました。 >>342-344 ありがとうございます。 >>342 の dd を使った方法は大変参考になります。 あと、 # sed -e '1s/^\(...\)^V^B/\1^V^C/' in > out でもできました。 ^V^B は <Ctrl>V<Ctrl>B 、 ^V^C は <Ctrl>V<Ctrl>C です。 ひとつ、お聞きいたします。 Nコマンドって、最後の行で次行が読めない場合、何もせず終了、 のはずですよね。すると、 sed 'sed ':l;N;bl' <file> とすると何も出力されないんじゃないかと思うんですが、 私の使っているGNU sed 4.1.5版だと<file>の全部を出力してしまいます。 つまり、「何もせず終了」じゃなくて、「デフォルト出力して終了」 になっているように思われるわけですが、これは、どうなんでしょうか。 yコマンドで"/"を対象に入れたいんですが出来ないんでしょうか 初歩的ですいません >>350 sed y,abc,ABC, とかできるから、 sed 'y,ab/,ab%,' もできる。 そうか、区切り文字変えられるのsコマンドばかりじゃないんですね。 どうもありがとうございました。 sedでシェルすくりぷとの行つなぎバックスラッシューを消して、繋ぐことできますか? perlなら-pe "s/\\\n//g"でできます。 edでも、awkでもできれば、教えていただけませんか? sed -e ':lbl' -e '/[^\\]$/b' -e 's/\\$//' -e N -e 's/\n//' -e 'b lbl' 置換パターンに\nを許さない場合は sed -e ':lbl' -e '/[^\\]$/b' -e 's/\\$//' -e N -e 's/ //' -e 'b lbl' 踊っているように見えて仕方がない echo "000000$NUM" | sed -e 's/.*\(..\)\(..\)\(..\)/\1\2\3/' sedでファイルのある部分までをファイル1、それ以降をファイル2に出力ってスマートにできませんか? 例えば100行のsample.txtというファイルで、 sed -e "50q" < sample.txt > sample1.txt sed -e "1,50d" < sample.txt > sample2.txt の様にするのは無駄におもえてしまいます。 sed -ne '1,50w sample1.txt' -e '51,$w sample2.txt' < sample.txt とか? split -50 sample.txt; mv xaa sample1.txt; mv xab sample2.txt >>360 ,361 ありがとうございました。勉強になります。 入力テキストを 1行目の内容 2行目の内容 2行目の内容 3行目の内容 : 最終-2行目の内容 最終-1行の内容 最終-1行目の内容 最終行の内容 という形(隣り合った行の値を空白で連結する)に変換するにはどう書けば よいでしょうか。 sed -ne '1!p;$!p' と通せば先頭末尾以外の行を2回出力できたので、 これを2行分ずつくっつければ出来そうなのですが… ¥n ってどのsedでも使えるんだっけ? $ seq 1 10 | sed -ne '1!p;$!p' | sed 'N;s/¥n/ /' 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 seq 1 10 | sed -ne '1h;1!{H;x;s/\n/ /;p}' unixの基礎概念という本の中に a 21 is 10 this 3 というtest.txtファイルに対して、 sed 's/\(.*\)\( *\)\(.*\)/\3\2\1/' test.txt とすると結果は 21 a 10 is 3 this になると書いてありましたが、実行してみると並びはかわりませんでした。 >>367 確かに。それじゃぁ一番左側の .* が、最長一致で行全体に一致しちゃうから、 並びが変わらなくて正解。 悪書の書名晒して。 久野さんらしくないミスだな。 確かに変わらないね。 >>367 真中の * の直前のスペース、 スペース2つじゃないの? コピペするとスペースが1つとかになるので注意。 >>371 はいそれです。解説にも 「これはどう読むかというと、『入力行を任意の文字列1と、空白のならび2と、また別の任意の文字列3 にマッチさせ、それ全体を3、2、1の順でつなげたものに置き換える』という意味になる。」と書いてあります。 >>372 なら、>>370 の指摘通りで、キミが間違っている。 × sed 's/\(.*\)\( *\)\(.*\)/\3\2\1/' test.txt ○ sed 's/\(.*\)\( *\)\(.*\)/\3\2\1/' test.txt 專ブラなら安価ポップアップでちゃんと表示されるのかな >>373 >>372 紙面上に、└┘└┘みたいな感じでスペースの個数は明示してあるの? 明示してないなら紙面が悪いと思うが。 >>373 空白2個ならいけるのですか。 >>376 そういう、└┘└┘みたいな感じはなかったです。文字数的にも一文字分の感じ ですし。編集上のミスかもしれませんけど。 >>376 > 「これはどう読むかというと、『...、空白のならび2と、... って書いてあるんだろ? >>378 それは、¥2 のこと。「スペース2個」のことじゃないよ。 >>378 正規表現を理解してないバカ発見。 任意の文字列 → \1 空白の並び → \2 別の任意の文字列 → \3 と言ってるだけのこと。それとスペース2つ書くのとは意味が違う。 任意の文字列の前か後ろの少なくともどちらかは、任意でない特定の文字・文字列(含^$)でないと困ったことになるということですね? 俺も前それで失敗した。 sedの話題はこっちへ くれぐれもシェルスクリプトスレに書き込まないように! >>377 \2,\3がφで全体がマッチ \1に行全体 一つ目が\([^ ]*\)ならよかった。 AAA BBB=111 CCC=111 この行の111を000に置き換えするのに sed -e 's/BBB=111/BBB=000/' とする以外にもっとスマートな書式を教えてください。 GNU sedです >>386 > sed -e 's/BBB=111/BBB=000/' これじゃ、お題 > この行の111を000に置き換えするのに を満たさない。 矛盾を含む質問に答えることは不可能。 >この行の111を000に置き換えするのに この行のBBB=111だけをBBB=000にする書式でした すいません。 スマートの基準がわからないけど、BBBが二度出現するのが嫌なら sed -e 's/\(BBB\)=111/\1=000/' AAA BBB=111 CCC=111 DDD=111 EEE=1111 sed -e /BBB=/{'s/111/000/'} シェルスクリプトスレで覚えたやり方 sed -e 's/<space><space>*/<space>/g' test.txt って動かないんですが? EUCだとうまく動作しないのだが、これはデフォルトなのかな そもそも、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でやるならどう書くんだろ >>494 sed '/^abc/s/./x/g' かな? バックスラッシュって読みやすいか?日本語だと使い道無いし。 プログラミングで正規表現書いてると、 s/\dhoge\sfuga\s/hoge/ ↑似たような記号ばっかりで読みづらいw s/¥dhoge¥sfuga¥s/hoge/ ↑こっちのほうが読みやすい 使い道ある記号だったらエスケープシーケンスにも 円記号ねじ込むにも適さなかっただろうよ 最近可愛く見えてきた。意味を持たない組み合わせに腹を立てたり。 スラッシュとバックスラッシュが紛らわしいんならスラッシュ以外の 文字を区切りに使えばいいんでないの? 1,/hoge/ のようにaddressに正規表現を使う時のスラッシュを 他の記号に変えることはできますか? s@http://@https ://@ のようなことをしたいのです 他人が書いたコードで、例えば文字列が、 11 AAA [BBB] CCC/DDD.txt EEE FFF-01 だった場合に、ここから[]内の文字(BBB) を抜き出すために、 sed -e 's/\[//g' -e 's/\]//g' | awk '{ print $3 }' というスクリプトで BBB を取得しています。 このスクリプトを変更して、DDD を取得したいのですが、 どう書けば良いのでしょうか? >>507 1,\@hoge@ linuxで確認済み 検索でここにたどり着いた人の為と、何処のコピペか検索してもそれらしいものが出なかったので、貼っておきます POSIX sed http://pubs.opengroup.org/onlinepubs/9699919799/utilities/sed.html In a context address, the construction "\cBREc", where c is any character other than <backslash> or <newline>, shall be identical to "/BRE/". If the character designated by c appears following a <backslash>, then it shall be considered to be that literal character, which shall not terminate the BRE. For example, in the context address "\xabc\xdefx", the second x stands for itself, so that the BRE is "abcxdef". BSD On-line Manual of "sed" http://www.jp.freebsd.org/cgi/mroff.cgi?subdir=man& ;lc=1&cmd=&man=sed&dir=jpman-5.4.0%2Fman§=0 1. コンテキストアドレスにおいて、バックスラッシュ (``\'') と改行以外の 文字を正規表現の区切りとして用いることできます。 区切り文字の直前に バックスラッシュを置くことで、区切り文字をリテラルに解釈させることが できます。 たとえば、コンテキストアドレス \xabc\xdefx において、区切 り文字は ``x'' で、2つめの ``x'' は ``x'' という文字を表します。 よっ て、正規表現は ``abcxdef'' と解釈されます。 LINUX Man page of SED http://linuxjm.sourceforge.jp/html/GNU_sed/man1/sed.1.html /regexp/ 正規表現 regexp にマッチした行にマッチする。 \cregexpc 正規表現 regexp にマッチした行にマッチする。c には任意の文字を指定できる。 どうにも理解が出来ず教えて欲しいのですが http://sed.sourceforge.net/sed1line.txt から # print paragraph if it contains AAA (blank lines separate paragraphs) sed -e '/./{H;$!d;}' -e 'x;/AAA/!d;' これがどうにもわかりません。 H;$!d;の$!dが何故必要なのか? 動作の流れを教えて頂けないでしょうか? dがあるのは段落の区切りまで何も出力させないため ファイル末尾も段落の区切りだから$!が要る ファイル末尾に必ず空行があるなら$!は要らない dでそのサイクルが終了することは知ってますね? >>519 有り難うございます。助かりました。 !dをpの様に認識してしまっていて次のサイクルに移行させる イメージがなく、$!dを最終行を表示させるとしか思ってなくて 色々試してもどうにも腑に落ちないもので質問させて頂きました。 sedで桁そろえってどうしたらいいですかる 具体的にはls -l で出てきた結果のうち、ファイル名を最初に左揃え、ファイルサイズを右揃えで出力したいのですが、 sedコマンドだけで可能ですか? どうしてもsedだけでやたいんです! お願いします! UNIX哲学に戻るんだ。 1つのことをうまくやる、ものを組み合わせればいいんだから、まずはawkでやってみる。 awkでもいいが、シェル内部コマンドだけでもできるぞ。 ls -l | while read m l u g s t1 t2 t3 f do printf ありゃ? 記号があると書き込みが切れる。記号を全角にした。半角に直して読んでね。 ls -l | while read m l u g s t1 t2 t3 f do printf ”%-20s %8d %s\n” ”$f” ”$s” done FreeBSD$ stat -f %-20N%8z * Linux$ stat -c %-20n%8s * sedでの右揃えは、一旦中身のみを切り出してから左側に余分なスペースを加えてから 右から文字数固定で切り取る。 左揃えはその逆。 >>144 の更新 NetBSDとOpenBSDの標準sedで-iが導入。 入力ファイルを書き換えるには? ・-i オプションをつかう ・-i オプションがないsedをつかっているなら in-place editing 対応の sed の導入を検討する ・ed を使うことを検討する ・perl を使うことを検討する ・一時ファイルを必要としないファイル命名法を検討する ・http://www.idaemons.org/projects/inplace/ を使う ・(rm hoge.dat; sed 's/aaa/bbb/' > hoge.dat) < hoge.dat FreeBSD の標準 sed に -i オプションが取り入れられたのは 4.7R でそれ以前には無い。 NetBSD の標準 sed に -i オプションが取り入れられたのは 7.0 でそれ以前には無い。 OpenBSDのの標準 sed に -i オプションが取り入れられたのは 5.8 でそれ以前には無い。 MacOSX の 標準 sed は FreeBSD 由来なので元になるバージョンに依存する。 MacOSX 10.3以降は FreeBSD 5.1R由来なので、 -iオプションはある。 以前のGNU sed には in-place editing 機能はない (Changelog によると 2001-09-25 ) (3.02には in place オプションは無い) データハンドリングとしては、 入力ファイルをコピーして更新をかける 更新処理が終わったら、入力ファイルを削除して更新ファイルをりネームして入力ファイルとする みたいな方法で必要十分。 なんでもかんでもツールで処理するのではなく、OSが得意な機能はOSのものを使う。 クラッシュがいつ起こってもデータが確保できるのは、そういう、むしろドンくさい方法。 お遊びならいざしらず、仕事では安全確実性が少しでも高い方を選ぶのがプロ。 無論、履歴から復元なんてのも、データによっては必要だが、 処理が複雑になれば、一般的にトラブルも増える。 どこまで何をやるかは、ひとえにそのデータの重要性にかかっている。 バックアップから戻してもたいした事がないなら、何やってもいいだろう。 >>274 どうだろうね。数式の入った文章を写植 は、昔の印刷物のほうが上でしょ。 印刷屋に頼んでもtexの設定をそのまま つかわずindesignに読み込むから、 ひどいものだ 昔も今もTeXでやってくれる印刷屋に頼めばいいじゃん。 今も昔も餅屋のふりした餅屋はたくさんあるからな〜。餅の見る目のない会社だったってことで。 誰でも簡単にパソコン1台で稼げる方法など 参考までに、 ⇒ 『宮本のゴウリエセレレ』 というブログで見ることができるらしいです。 グーグル検索⇒『宮本のゴウリエセレレ』 8DL33JQ0HX https://mevius.5ch.net/test/read.cgi/unix/1489979246/l50 ここから来ました。 sedでiフラグとdフラグを両方立てることってできないのでしょうか。 $ cat file aaa AAA $ cat file | sed -e '/aaa/id' AAA d aaa 頑張って /[Aa]\{3\}/d と書く 今時の正規表現修飾子とか使えるsedがあるなら俺も知りたい >>539 ありがとうございます。とりあえずその路線で行きます。 素人目にはiフラグとdフラグを同時に使えないというのは極めて不自然というか 非対称な気もしますが…… 二つの役割は直交関係にあって,別に依存・背反はないと思うんですよねぇ。 GNU sedなら I 大文字が使えるじゃあないか $ printf '%s\n%s\n%s\n' 'AAA' 'Bbb' 'aaa' | gsed -e '/a/Id' Bbb おおおおおお!ありがとうございます。Iフラグは知りませんでした! しかしこれ GNU の独自拡張なんですよねぇ……欲を言えばPOSIX標準に従いたかったんです…… すいません。とりあえず>>539 の一文字づつ手動で置き換えるというやりかたで通します。 そして今気付いたんですが iという文字はフラグだけでなくて「行挿入」というコマンドとしての 解釈もあるんですね。だから「id」でdが当該箇所に挿入された形になったんですね。 馬鹿だなぁ俺 >>543 あーその通りですわ。 逆になぜ id で大文字小文字を無視して削除ができると思ったのか疑問なくらい阿呆でした……。 精進し直します。 # 素人考えで言うと「大文字小文字を無視して検索→その行でコマンド実行」なんて頻繁に実行するだろうに それに対応した機能が (POSIXの範囲で) 存在しないってのはちょっと頂けないですねぇ…… # 尤も上級者の方々は他の,もっと優美な方法を採ってらっしゃるのかも知れませんが。 ある文字がある回数続く*行*を置換することってできないんでしょうか。 ... xbcea aaa aaa aaa dkjef ... ↑このようなファイルで、 cat ./file | sed -e 's/aaa\naaa\naaa/bbb/g' とやることで ... xbcea bbb dkjef ... このような出力が得られることを望んでいるのですが、上記のコマンドでは無理でした。> < ご教授願いますm(_ _)m printf "xbcea\naaa\naaa\naaa\ndkjef\n" | sed '/aaa/{H;d;};/aaa/!{x;/^$/d;s/aaa\naaa\naaa/bbb/p;x;}' 汚いw ☆ 日本の、改憲をしましょう。現在、衆議員と参議院の両院で、 改憲議員が3分の2を超えております。『憲法改正国民投票法』、 でググってみてください。国会の発議はすでに可能です。 平和は勝ち取るものです。お願い致します。☆☆ 知り合いから教えてもらったパソコン一台でお金持ちになれるやり方 時間がある方はみてもいいかもしれません グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』 9M87D sedはストリームエディタ grepは文字列検索 awkはスクリプト言語 | sed -n -e "/<station /h;/<prog /{N;G;s/\n//gp}" ^ この行の後ろに<pfm>から始まる行をくっつけたいんですが、 すごく難しくてどうやっても出来ないです どうやればいいんでしょうか? イマイチやりたいことがわからず それに頭の | と尻の ^ はなんざんす それが行ってことざんすか >>552 nkf.exeを併用しているバッチ内のコードをコピペしただけなので、|と^は関係ないです >>551 ではxmlファイル内の「<station〜>タグで始まる行」と 「<prog〜>タグで始まる行+その次の行」を1行の文字列に連結しているので、 さらにその後ろに<pfm>タグで始まる行を連結して1行にしたい、ということです (この後に正規表現で最終的にcsv形式に置換しますが割愛) | sed -n -e "/<station /h;/<prog /{N;G;s/\n//gp}" ^ <pfm> くっついた! 10年以上前にファイル内容を逆順に表示するスクリプトコピペしたけど '1!G;h;$!d' 未だに内容理解できてないぜ! 便利なの持ってんじゃん tacでいいような気もするけど 短くても難読すごいから可能ならtacのたぐい、基存のコマンドで処理したい GNU sedじゃなくて、BSDsedをビルドしたい。 OS付属の/usr/binソースはあるけど https://github.com/freebsd/freebsd/tree/master/usr.bin/sed sed単体がない。 ビルド出来るBSDsedのURLを教えてください そこの使えばいいんじゃないの Makefileは適当に改変するとして >>561 make -f MakefileしだんたけどカレントディレクトリのMakefileはそのままでは使えなかった。 オプションが必要なのかも知れないが、よくわからず。 >>562 FreeBSD のソース用の Makefile は BSD make 用で GNU make では使えないよ。 なんの OS を使ってるのかわからいけど、 pkgsrc が対応している OS なら pkgsrc 導入して、 textproc/nbsed をインストールするのが一番楽だと思う。 http://pkgsrc.org/ >>563 MacOSです。ソース側で単体ビルドできる用意されていれば出来ると考えました。 早速挑戦して上手く行ったらここに報告します。 >>563 >FreeBSD のソース用の Makefile は BSD make 用で GNU make では使えないよ。 これ当たってた。BSDの本家に問い合わせたら560のURLにあるsedのmakefileはOS用らしい。 自分で一からconfigureやmakefileを用意すればビルド出来るのかもね。 sedの最新版を使いたかったが時間あるときに563を試します。 Makefileの中見てgcc一発でも行けんだろって気がするが って自分は前それやってみた気もするが それくらい試せよ >>566 確か、Linux のcore utilとかだとconfigure sedみたいなかんじで、コマンドの単独コンパイルできる。 manにかかれているメアドでBSDの本家に問い合わせたら 単独コンパイル出来ないとの返事だった。OSビルド用らしい もう消してしまったが、成功した人がいたら教えてほしい。方法がわかれば再試行する気はあります 正規表現一致した行と,その一致した行と4行後のみを抽出とかってどうすればいいですか? -n '/re/{p;n;n;n;n;p;}' とか? *.cと*.hを落として gcc -I . compile.c main.c misc.c process.c -o sed するとmain.cの__unreachable();がリンクエラーになるけど https://github.com/freebsd/freebsd/blob/master/sys/sys/cdefs.h#L385 を参考に((void)0);に置き換えればビルドできるじゃん >>572 有難う。諦めていたけど早速やってみます。 560です。572のとおりビルドできました。 インストール済のMac版sedは2004年頃なのでバージョンアップできて助かります。 これから100近くあるソースを調べます。 linux版との互換性ない記述を書いてしまいました。 gnu sedもMac上ではビルドできていませんが諦め。 マジかよ gnu sedなんてそれこそ./configureしてmakeだけじゃん --program-prefix=gくらいつけといた方がいいだろけどさ >>575 560です。エラー、コピペしていいですか?長いんですけど。。。 gnu sed もインストール出来ました。 bash_profileのパスを最小限にしたらエラーがなくなったみたい? >>577 質問は取り消します。有難うございました。 sed -n '10509757p' primes 2147483563 2147483579 2147483587 2147483629 2147483647-2147483648-2147483647-2147483646-2147483645-2147483644 OFやらかした最終行 ... -1800706952-1800706951-1800706950-1800706949-1800706948-1800706947-1800706946-1800706945-1800706944-1800706943 sed -ie '10509758,$d' primes sedのホールドスペースは、その内容を削除するにはどうすれば? とりあえずs/.//g;xでできたけど、もっと直接的なやりかたはないんかなー、と。 sedスクリプトファイルでよく使われる拡張子はあります? ほとんどコマンドラインに-eで書ききるものでしょうが、あえてファイルにするとしたらやっぱりsed? >>582 別にこだわる必要はないけど 各種sed処理系付属のexamplesとか覗くとみんな.sedなので、あえて正書法にこだわるならやはり.sedかと 実装を隠したコマンドとして纏めたい、常に特定のオプション(-i等)で起動したい、主コードとsedの拡張チェック等を分離したいならenvを使うとよい sedによってはオプションを重ねられたり重ねられなかったりするので #! /usr/bin/env -S sed -f (-i -n -e 'check') ところでgnu sedの付録のdc.sedってのやばいなこれ 興味深いけど誰か注釈付けてくれたりしてないのか onigsed がダウンロードできなくて困ってます。 それらが引退した人も逮捕されてるの見つかって捕まって誰かに相手されないもんね ヒスンは凄く特殊な銃を使って 4232 じり下げはやめて良い部屋は空いてるんだったら 胃がびっくりしておかしくなる 家庭崩壊する それが政治とどう関係あるのが信じられなくなったから焦った read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる