おまいら! sed の使い方教えて下さいm(_ _)mat LINUX
おまいら! sed の使い方教えて下さいm(_ _)m - 暇つぶし2ch116: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番)


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch