おまいら! sed の使い方教えて下さいm(_ _)m
at LINUX
160:login:Penguin
11/09/22 12:25:27.36 KTYpcKqF.net
>>159
こんなに下がっているスレで質問するときは上げた方がいい。誰にも気が付かれないかも知れない。
それ本当にsedのスクリプト?自分にはedのスクリプトに見えるが、それを見つけたページが分からないと何とも。
分かってると思うけど、sedは一行ずつ順番に処理していくから、後戻りは出来ないし事前に最終行も分からない。
だから、工夫が必要で下のようになる。分かりやすく汎用的に書くならsedスクリプトを書くしかないね。
sed '1{N;N;N;N};$!{P;N;D};s/hoge/piyo/g' file
sed '1{x;d};2,4{H;d};5{x;G};$!{P;N;D};s/hoge/piyo/g' file
でもこれは、嫌だな。スクリプトで書くと分かり易いんだけど…
tac使っていいのなら、tac | sed '1,5s/hoge/piyo/' | tacって書けるけど遅いだろうね。
161:159
11/09/22 14:33:51.94 IWU2+wB3.net
>>160
返信ありがとうございます。m(_ _)m
2chビューアのデフォルトに慣れていたせいで上げ忘れました(^^;
ネットで見かけたサンプルはGoogleで
「sed (最終|最後)*行 削除」を検索すればいくつか見つかると思いますが
OSやsedバージョンまでは書かれていないのでその辺がなんとも…。
sedのパターンスペースは使ったことがなかったので
ちょっと勉強してみたいと思いますが、
他人(未来の自分)が見ても理解できないかもしれませんね…
162:login:Penguin
11/09/22 23:43:57.24 KTYpcKqF.net
>>161
それで出たわ。「"sed -e '$-3,$d' file"」でググると出るわ出るわ…
POSIXの規格読むと分かるけど、sedのアドレスにそんな指定方法はないし、
そもそも仕組み上そんな指定ができる訳がない。(そういう実装だとsedの良さがなくなる)
でも、ちょっとコマンド叩けば直ぐ試せるのに、ここまで間違った記述が蔓延したのは疑問。
気になって調べたら、どうも「入門UNIXシェルプログラミング 改訂第2版」が犯人。
正誤表に訂正あり。(参考:URLリンク(www.sbcr.jp))
さらに、発売日以前に絞ってググったら、どっかの大学生がコピペしたページのみヒット。
コピー元は2003年まではあったようだから、つまり
間違った記述の1ページ → それを検証せず本に記載 → それをさらに検証せずにネットにコピペ
という流れで嘘情報が増大していったようだ。試せば出来ないことなんて瞬時に分かるのに…
ネット上の出展不明、再現もしくは検証不能情報は信用するなってことだな。
ところで、元レスの「"sed -e '$-4,$d' file"」で検索をかけても一件もヒットしなかったぞ。
わざわざ書き換えて転載されると検索にもでなくて困るよ(´・ω・`)
163:login:Penguin
11/09/22 23:57:58.95 KTYpcKqF.net
上の例に加えてもう一つ。一番分かりやすく書くとこうかな。
sed ': loop
1,4 { N
b loop
}
$! { P
N
D }
s/hoge/piyo/g' file
こう書くと改行が入ってワンライナーにはつらいがしかたない。
ついでに言うとsedは普通パターンスペースしか使わない。使ったことないってのは変だ。
上のもパターンスペースしか使ってない。
POSIXにはないけど、GNU textutils(tacもそうだった)ならこんなのもいけるはず。
{ head -n -5 file && tail -n 5 | sed 's/hoge/piyo/'; }
164:login:Penguin
11/09/23 14:24:33.02 vKgog6QO.net
>>159
最後の5行だけ置換対象とする
#!/bin/sh
sed "$(($(sed -n '$=' file)-5+1)),$ s/hoge/piyo/" file
sedしか使ってないよ〜
/bin/shのArithmetic Expansionは使ってるけど
165:164
11/09/23 14:50:32.68 vKgog6QO.net
あ、fileは5行以上って前提
そこは工夫しないと
166:login:Penguin
12/06/07 10:18:04.20 srWmu+na.net
1行目の後にtestを入れるつもりがエラーになります。
>cat text.txt| sed -e '1atest'
sed: 1: "1atest
": command a expects \ followed by text
シェルの中で、置換と追加をやりたので、実際はこうなってます。
sed -e 's/Before/After/g' \
-e '1iコメント' \
-e '12iコメント' \
元ファイル > 新ファイル
行追加だけエラーになるのですが、
どこがおかしいのでしょうか?
167:login:Penguin
12/06/07 20:33:53.89 1zdUDRFK.net
>>166
質問の仕方から勉強すべき
どういう状態で何をするとどうなるのか
誰でも再現できるような説明を書くべき
168:login:Penguin
12/06/30 11:03:57.16 JdPlGyq5.net
sed使うくらいならperl使った方が楽。
169:login:Penguin
12/06/30 11:18:32.68 kfAX5M5C.net
>>168
遅れてる〜
170:login:Penguin
12/07/02 23:12:12.79 hH2EDXHS.net
>>168
perl使いってマジで気持ち悪い
どんな場面でも無理やりperlを使おうとする
シンプルなコマンドの組み合わせで機能を実現できたり、
よりモダンな言語やスクリプトで簡単に実現できるのに
強引なまでにperlにこだわる
(emacs使いもその傾向有り)
殆ど病気だわ
171:login:Penguin
12/07/31 04:16:59.47 79ga/vr4.net
常識で考えて、sedのバッファやりくりでパズルするくらいならperlのほうが楽だろ。
172:login:Penguin
12/07/31 14:10:23.75 SnlNjA/Q.net
>170
徒歩5分の距離にある目的地と徒歩1時間のそれ、そこに行くために歩いても自転車をこいでも自動車に乗ってもその人の自由でしょ。
常に特定の手段しか使わない人に関わりたくなければその人から遠ざかっていればいいじゃない。
173:login:Penguin
12/08/30 20:41:42.25 kbI/S7Ao.net
スレ違いで申し訳ないんっですが、join コマンドの使い方について教えてください。
下記のような「時間,数値」を持ったcsvファイルがあり、時間をキーにして結合したいと思っています。
コマンドを調べたところ「join」(もしくはpaste)コマンドがぴったりだったので
join aaa.csv bbb.csv
とコマンドを実行したのですが、期待結果が返ってきません。
ファイルの内容と期待結果は以下です。
aaa.csv
-----------------------
23:00:00,4.12
23:05:00,17.07
23:10:00,2.04
-----------------------
bbb.csv
-----------------------
23:00:00,4.35
23:05:00,8.39
23:10:00,2.07
-----------------------
ジョインした期待結果
-----------------------
23:00:00,4.12,4.35
23:05:00,17.07,8.39
23:10:00,2.04,2.07
----------------------
どうしたら期待結果のようになるでしょうか?
174:login:Penguin
12/08/30 21:13:34.46 kFZpMX1L.net
スレ違いだとわかってるなら適切なスレで聞いてください。
175:login:Penguin
12/08/30 21:40:21.10 R2lX72jf.net
catじゃだめなのか…
176:login:Penguin
12/08/30 21:48:28.92 kbI/S7Ao.net
>175
catコマンドで横に結合できるのでしょうか?><
177:login:Penguin
12/08/30 23:35:50.57 2CJ6F/qn.net
>>176
スレ違いっ><
失せろっm(__)m
178:login:Penguin
12/08/31 08:24:07.87 5kRScUpP.net
>>173
sed スレなんだから、sed を1つでも使ってやれよ!w
179:login:Penguin
13/11/04 18:07:02.93 p0Jz6Hdm.net
ちーばくん
ヘ__/ ̄ ̄ ̄\
\ノ (・) ヽ__)
\_ノ 丿
(ノー、 |
ノ ヽ
/ | |
| (_ノ
\ /
) /
(_ノ
180:login:Penguin
17/07/01 01:46:08.28 Gj6Eudou.net
>>180
ありがとうございます!
最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
2460日前に更新/51 KB
担当:undef