[表示 : 全て 最新50 1-99 101- 2chのread.cgiへ]
Update time : 01/04 13:54 / Filesize : 39 KB / Number-of Response : 149
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

おまいら! sed の使い方教えて下さいm(_ _)m



1 名前:sed@修業中 [03/11/03 08:26 ID:62bfq5Tp]
Linux使ってるならsedあたりはサックって使えるようになりたい。
だけどなかなかまとまった日本語の解説がすくなくて苦労する。
ここで皆の智恵をだしつくして欲しい!

日本語解説サイト
www-6.ibm.com/jp/developerworks/linux/010202/j_l-sed1.html
www-6.ibm.com/jp/developerworks/linux/010216/j_l-sed2.html
www-6.ibm.com/jp/developerworks/linux/010223/j_l-sed3.html

英語だとここからたどれる
sed.sourceforge.net/index.html

115 名前:login:Penguin [2008/07/17(木) 19:02:47 ID: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 mailto:sage [2008/07/17(木) 20:43:30 ID:KzL7zakf]
>>115
まず関係ないと思われる部分を省いて少しずつ試しなよ。



117 名前:login:Penguin mailto:sage [2008/07/17(木) 20:49:48 ID:KzL7zakf]
ヒント
----------------------------
#!/bin/sh

echo "input word"
read word
echo ""
sed -e "1 s/^/${word}\n/" head.log
----------------------------

118 名前:login:Penguin mailto:sage [2008/07/17(木) 21:07:52 ID:fSKuDDXe]
うわああああ!!
恥ずかしいです(><)

ありがとうございました(;_;)

119 名前:login:Penguin mailto:sage [2008/08/01(金) 22:50:22 ID:WR526y3P]
改行の扱いについて教えてください。

以下のページによると
www.gcd.org/sengoku/sedlec/3.txt

> では「ジャンプせよ」という命令を実行することなくスクリプトの最後の行を
> 過ぎてしまったらどうなるのでしょうか。(中略)この様な場合、SED は p と d を
> 自動的に実行します。

とありますが、
echo -n aaa | sed -e 's/aaa/bbb/'
を実行すると
bbb
が改行を伴わずに出力されます。

上記の説明と異なる結果でよく分からないのですが、、、
パターンスペースに各行の文字列を入れる際、行末の改行は捨てられるが、
その行が改行を伴っていたか伴っていなかったかについて、sedは何らかの形で
記憶している、そしてデフォルトの出力の際、もともと改行を伴っていたか
どうかによって、出力文字列に改行を付けている。
このような理解でよろしいでしょうか。

よろしくお願いします。

120 名前:login:Penguin [2008/08/02(土) 00:47:41 ID:+VO1N7E+]
age

121 名前:login:Penguin mailto:sage [2008/08/03(日) 00:52:44 ID:VOatfWTi]
>>119

GNU sed のソースを見た限りでは、一行ごとに読み込んでいるのだけど
改行がついていたかどうかのフラグを持ってるね。
んで、入力に改行がなかった場合には出力にも付加しない。

POSIX的にはどうか知らないけど 119にある理解でいいんじゃないか?


122 名前:119 [2008/08/03(日) 21:20:32 ID:S34ZH5Ab]
>>121
デフォルトの出力に関しては、最終行での改行の有無を意識しておけばよい
ということですかね。
調べていただいてありがとうございました。

123 名前:121 mailto:sage [2008/08/04(月) 02:43:40 ID:GBDGU4jb]
>>122

sedはawkとかPerlみたいにレコードの区切りを変えることができなくて一行単位というのは
動かないから、改行コードのあるなしが問題になるのは最終行だけだね。

ソースをちょっと grep してちょっと眺めただけだからたいした手間じゃないよ。





124 名前:login:Penguin mailto:sage [2008/08/05(火) 20:51:25 ID:X/szKwVr]
grepの場合、改行がない最終行に対しては、改行を付けて出力するね。

125 名前:login:Penguin [2008/10/27(月) 23:21:57 ID:BnAQXfRx]
"aaa"
"bbb
ccc"

このようなファイルの2行目と3行目を連結したいのですが、可能でしょうか。

126 名前:login:Penguin mailto:sage [2008/10/28(火) 00:00:22 ID:LqvgIl+t]
>>125
詳しい条件書かないとわからんよ。

s/b\n/b/g

その例には使えるけど。

127 名前:login:Penguin [2008/10/28(火) 00:04:49 ID:gCa9/U26]
ありがとうございます。
この例で使えれば大丈夫なのですが、
条件として\nは使えるのでしょうか。

128 名前:login:Penguin mailto:sage [2008/10/28(火) 01:07:16 ID:LqvgIl+t]
>>127
質問の意図がわからないのだが。


129 名前:login:Penguin mailto:sage [2008/10/28(火) 01:08:53 ID:dGaeCgPM]
>>127
「自分の環境では、\nが認識されませんでした。」か?

130 名前:login:Penguin mailto:sage [2008/10/28(火) 01:24:35 ID:LqvgIl+t]
>>127
ああ、すまん。確かにダメだわ。sedじゃないけど、

perl -pe "s/b\n/b/g" ファイル名

これで勘弁。

131 名前:login:Penguin mailto:sage [2008/10/28(火) 03:01:43 ID:/qenFkSI]
/bbb$/{
N
s/\n//
}

でどう?

マッチ文字列や置換文字列に \n が使えるかどうかは環境によるので
お前さんがどういうところで使っているかを書かなければ答えようがない。


132 名前:login:Penguin [2008/11/09(日) 22:38:03 ID:iboFIZ94]
>「Error」がある行に,「### Check Line ###」という新しい行を追加する
>$ $ sed -e "/Error/i #### Check Line ###" source.txt

↑の構文なのですが、「新しい行を追加する」のではなく、
行の入れ替えを行う方法は無いでしょうか?


133 名前:login:Penguin mailto:sage [2008/11/10(月) 02:48:47 ID:oBt1rply]
>>132
入れ替えって何と何を入れ替えるの?
#### の行を先に出力したいってこと?




134 名前:login:Penguin [2008/11/10(月) 05:23:57 ID:Vv2a12Zc]
>>133
例えば、以下のようなテキストがあった場合
111
222
Error 333
444
555

「Error」がある行に,「### Check Line ###」という行に入れ替えたいです。
以下のようなイメージです。
111
222
### Check Line ###
444
555



135 名前:login:Penguin mailto:sage [2008/11/10(月) 05:33:29 ID:e8TF6STv]
iじゃなくてc使う

136 名前:login:Penguin [2008/11/11(火) 21:48:17 ID:DQj2Ej4A]
>>135
遅くなりましたが有難うございました!

137 名前:login:Penguin [2008/11/15(土) 16:52:59 ID:FFNCNb8R]
ナイスなスレだな

138 名前:login:Penguin mailto:sage [2008/12/02(火) 10:28:40 ID:2vyuRZ6k]
なぜawkを使わない?


139 名前:login:Penguin [2008/12/03(水) 01:46:50 ID: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 [2008/12/03(水) 02:53:15 ID:1xcvKxcT]
>>139

 sed -ne '/1/,/3/{/3/q; p'



141 名前:139 [2008/12/03(水) 08:40:11 ID:O9/K8qme]
>>140
こういう時にqを使うんだ。
物凄く恥ずかしながら、目から鱗状態です。
2週間の間、何度も思い出しては考えても分からなかったので質問してみた。
ありがとう。

142 名前: [―{}@{}@{}-] login:Penguin mailto:sage [2009/04/08(水) 08:59:15 ID:DR9diDX0]
unkar.jp/read/society6.2ch.net/gline/1211859269
m(_ _)m

143 名前: [―{}@{}@{}-] login:Penguin mailto:sage [2009/04/08(水) 09:00:09 ID:DR9diDX0]
unkar.jp/read/society6.2ch.net/gline/1211859269/



144 名前: [―{}@{}@{}-] login:Penguin mailto:sage [2009/04/08(水) 09:01:33 ID:DR9diDX0]
unkar.jp/read/society6.2ch.net/gline/1211859269.html

145 名前: [―{}@{}@{}-] login:Penguin mailto:sage [2009/04/08(水) 09:04:26 ID:DR9diDX0]
www.23ch.info/test/read.cgi/gline/1211859269/

146 名前: [―{}@{}@{}-] login:Penguin mailto:sage [2009/04/08(水) 09:08:12 ID:DR9diDX0]
www.23ch.info/test/read.cgi/news/1215790476/

147 名前:login:Penguin [2010/06/01(火) 16:15:16 ID:8+L/+i95]
i=`echo $i|sed -e 's/^\([^ ]*\)\/$/\1/p' -e d`

スクリプト中のこの1文の意味が良く分かりません。
どういう処理をしているのか教えていただけないでしょうか。

148 名前:login:Penguin mailto:sage [2010/06/01(火) 23:50:47 ID:AqF3qhLQ]
>>147
pc11.2ch.net/test/read.cgi/linux/1274866441/109






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](*・∀・)<39KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef