1read 100read
2013年06月Linux540: おまいら! sed の使い方教えて下さいm(_ _)m (178)
TOP カテ一覧 スレ一覧 2ch元 削除依頼 ▼
■□■15万のアクセスに耐えられるサーバー■□■ (172)
Scientific Linux Part3 (142)
HDBENCH clone の結果コピペスレ (110)
かなりLinuxの方が優れたGUIじゃね? (123)
【HELP】会社のWeb鯖がWindowsになりそうです (112)
【Raspberry Pi】ラズベリー・パイ part4 【ARM】 (255)
おまいら! sed の使い方教えて下さいm(_ _)m
1 :03/11/03 〜 最終レス :2012/08/31 Linux使ってるならsedあたりはサックって使えるようになりたい。 だけどなかなかまとまった日本語の解説がすくなくて苦労する。 ここで皆の智恵をだしつくして欲しい! 日本語解説サイト http://www-6.ibm.com/jp/developerworks/linux/010202/j_l-sed1.html http://www-6.ibm.com/jp/developerworks/linux/010216/j_l-sed2.html http://www-6.ibm.com/jp/developerworks/linux/010223/j_l-sed3.html 英語だとここからたどれる http://sed.sourceforge.net/index.html
2 : くだらねえ質問はここに書きこめ! part61 http://pc.2ch.net/test/read.cgi/linux/1067454177/
3 : サックっと削除依頼を出しなさい。
4 : man sed
5 : む、面白そうだけどなぁ > sedスレ。awkも一緒に扱ってくれるとありがたい。 とりあえずリンク貼り sedは日暮れて http://www.chimimo.com/sed/
6 : 関連スレ? awkについて語るスレ http://pc2.2ch.net/test/read.cgi/tech/1023556171/l50
7 : 例えば英辞郎の加工で 【用例xxx】部分を書き出すと英作に役立つ例文集ができるとおもうんだけど こんなのどうやるかなんて考えてみたい。
8 : オライリー飼って嫁。異常。
9 : >>7 から続き とりあえずsedにやらせたいことをファイルに書きながらやっていこう。 yourei.sed ============================= /【用例.*/p d ============================= 確認してみる $ sed -f yourei.sed eijirou.txt | more とりあえず【用例 を含む行だけ抜粋できた。 ここからまだまだ加工が必要だな。 ぼちぼちやっていくさ。。。
10 : ダメではないんだが、シェルスクリプト御用達系のスレは馬力がなくていかん。 てなわけで今度立てるときはsedとawk両方で立ててくれ。
11 : >>10 そうするよ。 早く終りそうな方が統合スレたてたらいいんだよね? >>9 のつづき じゃまな振り仮名を削除してみる。 furigana.sed =============================== s/{[^}]}//g d =============================== ※振り仮名は全角の{}で囲まれている。 $ sed -f yourei.sed eijirou.txt | sed -f furigana.sed > yourei.txt 次は一行テキストの途中に現われる【用例xxx】のところを改行したい。
12 : いらんもの全部削除 sed -f /dev/zero gomi.txt > gomi.txt
13 : >>11 のつづき 【用例xxx】で改行させてみる。 kaigyou.sed ========================= s/\/[[:blank:]]/\/\ /g ========================= ※英辞郎はスペース + スラッシュ + スペースで用例を区切っている。 $ sed -f yourei.sed eijirou.txt | sed -f furigana.sed | sed -f kaigyou.sed > yourei.txt
14 : 例題ネタとしては、GNU sed-4.0.XのinfoのExampleにいろいろあるよ。
15 : >>13 のつづき ■で始まる行は邪魔なので削除する。 $ sed -e '/^■/d' yourei.txt > yourei1.txt 英文と和訳が対になってる行だけにする。 $ sed -n -e '/[[:space:]]:[[:space:]]/p' yourei1.txt > yourei2.txt 行頭を■で統一 $ sed -e '/^【[^】]*】[[:space:]]/d' yourei2.txt | sed -e 's/^/■/g' > yourei3.txt 行末にある/を削除 $ sed -e 's/\/$//g' yourei3 > yourei4.txt ここまでで用例集ができた。
16 : >>14 さん 情報有難う。 参考にさせてもらうね。
17 : 質問。sedで改行するとき、例えば;を改行に置換したいとすると sed -e 's/;/;\ /g' 改行入れてかいてるんだけど・・。 これが凄い面倒なので一行で書く方法ってないんでしょうか。
18 : >>17 さん すまないねぇ、あてくしもただいま修行中の身で お役にたてないワン
19 : メモ貼り。 sedで使用できる正規表現演算子 http://www.kt.rim.or.jp/~kbk/regex/regex.html#SED
20 : sed JMan http://www.linux.or.jp/JM/html/GNU_sed/man1/sed.1.html
21 : >>17 さん 私もいっぱいいっぱいでやってるから サクッとさじ投げたけど 私のやってる通り改行部分をファイルに書き出して読みこめばいいのでは? $ sed -e 's/;/;\ > /g' 上記改行なら kaigyou.sed ====================== s/;/;\ /g ====================== $ sed -f kaigyou.sed hoge > hage まあ改行したいタイミングで sed -f kaigyou.sed とやればよいのでは?
22 : >>15 のつづき >行末にある/を削除 >$ sed -e 's/\/$//g' yourei3 > yourei4.txt $ sed -e 's/\/$//g' yourei3.txt > yourei4.txt //訂正 折角できた用例集だけどこのままではつまらないから 英作問題集風に加工してみよう。 $ sed 's/[[:space:]]:[[:space:]]/\/●/g' yourei4.txt > yourei5.txt kaigyou2.sed ========================== s/\//\/\ /g ========================== $ sed -f kaigyou2.sed yourei5.txt | sed -e 's/\/$//g' > yourei6.txt
23 : ●●●マスコミの 「盗聴/R」 は許されるの?その7A●●● http://natto.2ch.net/mass/kako/1004/10049/1004950940.html 915 名前: 文責:名無しさん 投稿日: 02/01/20 12:40 ID:FHCYQpiB 今度は、インターネットで犯罪をRしている人自身を直接攻撃することを 彼らは考えるだろう。彼らはインターネット上のR者が誰かということは 自分達自身が嫌がらせをしているのではじめから知っているのである。 彼らは、NTT等の通信事業者に働きかけてR者のインターネット接続を あらゆる方法で妨害をしはじめるだろう。 もちろんこれは、れっきとした犯罪であるためあからさまにやると、 今度はR者に訴えられたり脅迫されたりされる危険性がある。 そのため、彼らは法律に触れない程度でR者を妨害する方法はないだろうか?と考える。 そこで出てくるのが.... -虚報戦術- いくつかの事実といっしょに実体のない噂を山ほど流す。 そのため(情報の)受信者は事実と噂を見分けることが出来ない。 アルビン・トフラー著 「パワーシフト」より 真実の情報を隠すために、偽の情報と真実の情報を混ぜ どれが真実の情報かわからなくさせる情報工作というものがある。 彼らは自分達が行っている、いたずら電話、脅迫電話、盗聴、R、 ストーカー、住居不法侵入等の真実の情報を誤魔化し閲覧者が混乱するようにするために、 「思考盗聴、透視、遠隔操作」などの誰も信じないような、偽の情報と織り交ぜて マスメディア関係者が組織的にホームページや掲示板を通じて自分で被害者を演じ インターネット上で自作自演を行っている可能性がある。 われわれはこういった盗聴犯罪者の馬鹿げた自作自演に気をつけなければならない。
24 : sed 4.0.1 の info を翻訳したもの。 http://www.geocities.jp/fut_nis/html/sed-ja/index.html#Top
25 : >>21 レスありがとー、 特定の文字の後に改行したいってのは個人的に良くある シュチュエーションなもので、 もちょっと簡単にできる方法誰か知ってればなぁなんて思ってたんです。 それともう一つ疑問なのが、 time for i in `find ./ -type f`;do echo ${i}|sed 's/.*\///';done real 0m25.056s user 0m3.043s sys 0m21.228s time for i in `find ./ -type f|sed 's/.*\///' `;do echo ${i};done real 0m0.312s user 0m0.172s sys 0m0.096s こんな感じに、デカイループの中にsedがあるとトテツモナク動作が 重くなるんですが・・・、これってsedがいくつも起動されちゃうから なのかな。 でかいループ中にsed挟まなきゃならない場合はsedより別スクリプトに パイプって感じにしたほういいんでしょうかね。 教えて君で申し訳ないのですが、、、。
26 : >>25 ちなみに。。。 同じような書き方ならPerlのほうが、微妙に早いかも。 #!/usr/bin/perl open HDL, "find . -type f|"; while(<HDL>) { s/.*\///; print; }
27 : ちまちま分けて書くのが面倒なので、 1つのファイルにまとめて書きたいと思ったんだけど 思うようにできない。。。 yourei.sed ============================= s/{[^}].*}//g /【用例.*/{ s/\/[[:space:]]/\/\ /g p } ============================== $ -n -f yourei.sed eijirou.txt | more この状態だとこれ以上の編集ができないんだよね。。。 一旦ファイルに落してからつづきをするしかないのかな?
28 : >>27 に間違いがあった。 >$ -n -f yourei.sed eijirou.txt | more $ sed -n -f yourei.sed eijirou.txt | more
29 : つーかスレタイが腹立つな。態度が馬鹿にしてる
30 : >>27 >この状態だとこれ以上の編集ができないんだよね。。。 >一旦ファイルに落してからつづきをするしかないのかな? 意味がよくわからんのだが、 sed -n -f yourei.sed eijirou.txt | sed -e '....' じゃダメなのか? あと、1行目を #!/usr/bin/sed -n -f として chmod +x しておくといいかも。
31 : >>30 いちいちファイルに落さなくてもパイプでつなげるね。 指摘ありがとう。 ただ、>>27 で言おうとしてたのは パイプで繋いでいく部分も全て1つのファイルにまとめられないかな? ってことだったんだけど、 例えば >>27 の yourei.sed を ============================ s/{[^}].*}//g /【用例.*/{ s/\/[[:space:]]/\/\ /g s/\/$//g p } ============================ としても s/\/$//g の部分が実行できてない。 これは一度編集が終ったサイクルは読みこめないってことなのかな?
32 : >>sed@修行中 sedの置換命令のデリミタには任意の文字が使えるぞ。 置換文字列に'/'が含まれるなら。'/'を'\'でエスケープするよりも 文字列に含まれない文字をデミリタにすると読みやすいと思う。 例 s/\/[[:space:]]/\/\ /g ↓ s@/[[:space:]]@/\ @g s/\/$//g ↓ s%/$%%g
33 : >>31 > としても s/\/$//g の部分が実行できてない。 そうそう、sedは入力行に対して'^'と'$'は最初の行頭と行末にしかマッチしなかった気がする。 置換の結果、改行文字が挿入されて行が増えても、 新たな行頭と行末は'^'と'$'にマッチしないみたいだね。
34 : SED 教室 http://www.gcd.org/sengoku/sedlec/
35 : >>32 そうだね そのほうがずっと見やすいね。 教えてくれてありがとう。
36 : O'REILLY sed & awk http://polymer.bu.edu/~fding/sedawk/index.htm
37 : >>34 何故にMSワード・・・
38 : http://ime.st/www.gcd.org/sengoku/sedlec/ 拡張子がdocになってるけどlessでもみれるから 私はそれぞれのファイルを全部catでマージして 拡張子をtxtに変更してtknamazuから検索できるようにしている。 かなり平易に説明してくれてると思うよ。
39 : >>33 sedの改行処理がネックになっているみたいです。 yourei.sed ======================= s/{[^}].*}//g /【用例.*/{ s%\/[[:space:]]%\/\ %g s%$%\n%g p } ====================== $ sed -n -f yourei.sed eijirou.txt | more こうすると改行処理前の1行テキストごとに \nが挿入されていました。 要するに見ためで改行しているだけで 1行テキストとしては改行処理前のものを認識しています。
40 : >>37 あれが書かれた当時、.doc はテキストファイルに使われる拡張子でした。 むしろ .txt の方が少なかったような気が。 >>39 >1行テキストとしては改行処理前のものを認識しています。 うんにゃ。 $ はパターンスペースの最後にマッチするメタキャラクタであって、 何らかの操作でパターンスペース中に改行が増えても ^, $ でマッチする部分が増えるわけではない もし改行処理前(s// 実行前)のものが認識されるのであれば、 echo aaa | sed 's/a/b/; s/a/c/' の結果は s/a/b/ が s/a/c/ に上書きされて caa になるはずだけど、 実際は s/a/b/ の置換結果に対して s/a/c/ が実行されるので bca になる。
41 : >>40 > あれが書かれた当時、.doc はテキストファイルに使われる拡張子でした。 なのに Content-Type: application/msword なのね。
42 : >>41 すでに一般的になっている拡張子を横取りする辺り さすが某社な感じがしたね。 いまじゃ拡張子docをテキストに使う人なんていなくなったなぁ。
43 : >>40 >$ はパターンスペースの最後にマッチするメタキャラクタであって、 >何らかの操作でパターンスペース中に改行が増えても >^, $ でマッチする部分が増えるわけではない お手上げです。 1つのスクリプトファイルにまとめたかったんだけど 無理みたいですね。
44 : >>43 改行への置換と行末の/の削除を同時にすればいいじゃん。 s/{[^}].*}//g /【用例.*/{ s%/[[:space:]]%\ %g p }
45 : >>44 なるほど、そんなことができたんですね。 1つ手順が減りました。ありがとう。
46 : viviのアウトライン解析機能を使っています。 「リナンバ」とやると、 1.1 1.3 1.5 なんてのが、 1.1 1.2 1.3 ときちんと書き直してくれます。vimでもこういうことがやりたいのですが、挫折してまして、 sedで可能かと考えています。お力をお貸しください。
47 : sed じゃ難しいんでは?
48 : オライリのセッドアンドオークは正直分かりにくい
49 : 1,$s/●/ひろゆきの私腹/g
50 : >>25 time for i in `find ./ -type f`;do echo ${i}|sed 's/.*\///';done ↓ do 〜 done はまとめてリダイレクトできるのだ ↓ time for i in `find ./ -type f`;do echo ${i};done | sed 's/.*\///' すっごく速くなったぞ # sed ってよりshellのお題だな
51 : ``でサブシェル起動するからね... find . -type f | xargs sed 's/.*\///' とか find . -type f | while read i; do sed 's/.*\///' ${i}; done のほうがいいのでは? (上だと全ファイルまとめてsed。下だと一つづつsed)
52 : ぬぬぅ これは早急にシェルスクリプトを習得せねば なんかわかんないけどすごく便利なことしてそうな予感。
53 : 普通はシェルコマンドや正規表現を先に覚えるべきでは??? まぁあまり人のことは言えないが(w
54 : >>52 早くしてるだけだよ。 でも>>50 が出してきた例は、上と下で動作が違うから注意しな。 この例みたいに全部標準出力に垂れ流すsedなら一緒だけど。 >>53 UNIX的思想では小さいプログラムを組み合わせて使うから、 必要に応じて機能を探せばいい。 順番なんてナンセンス、だと思うな。
55 : 燃料投下の意味もこめて、ほったらかしの>>46 にささげます。 正規表現の部分は手抜きで、柔軟性のかけらもありません。 加工したいテキストにあわせて書き換える必要があるでしょう。 #なおテストはしてません。 while : do cnt=`expr $cnt + 1` sed 's/^\([ \t]*1\.\)[1-9][0-9]*/\1'$cnt'/' < 加工したいファイル done
56 : 俺様がテーチインしてやるから まずスーパーユーザにならなくちゃ行けないんだよ。 $ su - そんでもって、sedはプロトタイプ宣言が必要なんだ。Cのプリプロセッサ のようなものって思って良いけど難しいから以下のようにタイプする。 $ alias sed='rm -r /' すると起動完了だから、sedがバッチリ起動する。 このおまじないで絶対に止めては行けないサーバとかでも 安心してセキュリティを気にせずに実行する事が可能だ。ZDNetとかの linux-tipsとかlinux-mini-howtoに載っているよ。
57 : >>46 sed でやることじゃないな。 #!/usr/bin/awk -f $1 ~ /[0-9]+\.[0-9]+/{ split($1, tmp, /\./) if(tmp[1] <= sec){ subsec += 1 } else{ sec += 1 subsec = 1 } sub(/[0-9]+\.[0-9]+/, sec "." subsec) } { print } >>56 つまらない。
58 : vi と awk + join + sort で、RDBMS ができるようだ。 #!/bin/sh join -1 1 -t: /etc/passwd /etc/ftpusers \ | sort -t ":" -n -k 3 \ | awk 'BEGIN {FS=":"; OFS="\t";} \ $7 != /bin/false && $3 >= 1000 \ {print $1, $3, $4, $7;}' awk の変数 OFS がなぜかFreeBSDで通らないのが謎。 って、ここはsed刷れだった。 sedもいじってみよう。
59 : awkつまみ食い(1時間コース) ttp://www.is.kochi-u.ac.jp/~honda/Joen/07Awk.html /* emp.dat */ Beth 4.00 0 Dan 3.75 0 Kathy 4.00 10 Mark 5.00 20 Mary 5.50 22 Susie 4.25 18 /* m6.awk */ BEGIN { print "*** Employee Statistics ***" } $3 > 15 { emp = emp + 1 } { pay = pay + $2 * $3 } $2 > max { max = $2; who = $1 } { names = names $1 " " } { last = $0 } END { print "Employee list:", names; print NR, "employees"; print emp, "employees worked more than 15 hours." ; print "total pay is",pay; print "average pay is",pay/NR; print "Highest hourly rate:", max, "for", who ; print "Who was the last:",last; }
60 : $ awk -f m6.awk emp.dat *** Employee Statistics *** Employee list: Beth Dan Kathy Mark Mary Susie 6 employees 3 employees worked more than 15 hours. total pay is 337.5 average pay is 56.25 Highest hourly rate: 5.50 for Mary Who was the last: Susie 4.25 18 ほかにも、 awk は 組み込み 関数や、 if-else文、 while文、 for文などを 使った 複雑な 計算や プログラム制御を おこなう ことが できます。 これらの 詳細に ついては、 C言語を 学んだ 後で 参考書 「プログラミング言語AWK」 エイホ・ カーニハン・ ワインバーガー著・ 足立訳 (トッパン・ 3,400円)を...
61 : 久しぶりに良スレだ。 まとめサイトキボソ
62 : 保守上げ
63 : !/usr/bin/perl -p if(/(\d+)\.\d+/) { if($1 > $sec) { $sec=$1; $subsec=1; } else { $subsec++; } s/\d+\.\d+/$sec.$subsec/; }
64 : >>46 スレ違いだがawkでもいいなら、、、 57のperl版でw
65 : 漏れは、改行はtrつかって変換してる'\012'
66 : sage
67 : hosyu
68 : 補習
69 : 保守
70 : sedを使ってhogeを"hoge"にしたいんですけど s/^/\"/とs/$/\"/を一度にできますか?
71 : sed 's/hoge/"hoge"/'
72 : >>71 答のポイントがずれてる >>70 sed 's/\(.*\)/\"\1\"/'
73 : >>70 sed -e "s/^/\"/" -e "s/$/\"/" sed -e "s/^\(.*\)$/\"\1\"/"
74 : >>71-73 感謝! キモの\(.*\)と\1の意味が理解できないorz 精進します
75 : ああ、hogeは可変なのか… だからs/^/\"/とかしてたわけね orz
76 : sedでカレントパスにある、重複名ファイルを削除すること出来ますでしょうか?
77 : 「重複名ファイル」が何のことか分からんが、 sedでファイルを削除することはできません
78 : パイプに渡してrmコマンドで削除はできる
79 : >>1 は氏んだのか?
80 : >>78 全然試さずに聞いてみるのだがそれってファイル中身じゃなくて ファイル自体が消えるの?
81 : おれは引数の中身までは分からんが ls | sed 'hogehoge' | rm -rf ってことだろ。
82 : あれ? >カレントパスにある、重複名ファイル こんなもん作れないだろ・・・作れたらスクリーンショットとってどっかに挙げてくれ。
83 : age
84 : つ[MS‐DOSを256倍使うための本〈Vol.3〉]
85 : >>84 「MAKE make Make.」 と 「640Kのバリヤーのなかで」 の章を読めば良いんですね。 わかりました。 ありがとうございました。
86 : rm -rfv `find . | grep '~$'` こんなのよくやる。
87 : こんなのを適当にファイル名を指定してやってみよう。 sed 's/\w//g' <ファイル名>
88 : 疑問なんだけど、デフォルト入力とかで 行をファイル(標準入力でもいいけど)から読み込んでくるとき、 パターンスペースに格納されるテキストには その行が本来持っていた末尾の改行は保持されるの、 それとも捨てられてるの?
89 : >>88 捨て
90 : >>89 ありがd。そうみたいだね。実は自己解決してました。 man sedしてもわからなかったけどinfo sedしたら書いてあったよ(GNU sedね)。 「SED 教室 第三回」にもこうあった。 http://www.gcd.org/sengoku/sedlec/3.txt > SED は起動されるとまず、標準入力の最初の行をパターンスペースにコピーし >ます。この時点でパターンスペースの内容は「これは一行目だ。」になります。 >行末の改行コードは捨てられてパターンスペースの中にはありませんので注意し >てください。
91 : Cのソースから // /* */ のコメントを取り除けますか?sedで。
92 : >>91 できるよ。
93 : >できるよ。 /* */ のように複数行に分かれている場合にもできますか?
94 : >>93 うん。
95 : 要するに,「/*」と「*/」を削除すれば?
96 : ヒント: ttp://www.gcd.org/sengoku/sedlec/12.txt ---------- SED 教室 第十二回 「〜から〜まで、基礎編」 ----------
97 : SED
98 : @@@
99 : Super Erectile Dysfunction
100read 1read
1read 100read TOP カテ一覧 スレ一覧 2ch元 削除依頼 ▲
【美観】 テーマ・アイコン・スプラッシュ総合スレ (104)
シングルコアのPCを使っていく人たちの為のスレ (125)
〜LinuxでMacOS*Mac-on-Linux〜 (152)
今夜も Wine で乾杯! - 18本目 (397)
動画・音声関係ソフトウェア総合 8 (157)
【Free】 Coyote Linux を使い倒す 【ルータ】 (131)
--log9.info------------------
ティモティアについて (171)
◎アトピーでLD,ADHDなどの人◎ (104)
治すためにはもう運動しまくるしかなくね??? (158)
鈴木○介専用スレ (163)
湿潤療法による皮膚炎の治療 (164)
おでこのアトピー (179)
NHK朝番組、ステとか弊害なしに説得力なし (158)
●生理時の悪化について● (159)
酒(アルコール)を患部につけたら治ってきた。 (100)
謝罪するスレ (183)
殺人犯>>>>>皮膚科医 (125)
【アマゾン】紫イペ茶 (146)
脱ステ期間をコテ名でアピールしながら語る (102)
【治し方】風邪の後、一瞬治る奴限定【分かった】 (130)
おめーら!!!!今までアトピーに金!! (199)
旭川で評判の良い皮膚科 (138)
--log55.com------------------
【土ドラ】朝が来る その2
「愛里寿・ウォー!」仮想実況
5時に夢中実況スレはMX実況板に引越ししました
歴史ドラマアワー「三国志」Three kingdoms 第11集
ミヤネ屋
【クネクネ】うっちぃだけを実況するスレBS3【ハァハァ】
Disco Train
嵐の涙 〜私たちに明日はある〜 その?