X



sed
0274名無しさん@お腹いっぱい。
垢版 |
2008/04/15(火) 23:39:00
高校、大学と印刷関係の工場でバイトしてたんだ
当時職人と呼ばれる連中はタバコくわえながら
あごで指図しては怒鳴りあげたりやりたい放題
その頃何も知らなかったので「○○さん技術あるから仕方ないよね」みたいな空気があった
ん?
ちょっと待て!
機械の操作だけじゃん
今や家庭用のプリンターでも当時の技術を遥かに超えている
車にの運転とかもそうだよね
昔は女性が免許持って運転してると目立つしなんかあったら「女の運転わ・・」とか言われたもんだ
今の乗用車の性能で言えば当時のレーサーを余裕でぶっちぎれますw
そんな感じで機械やソフトを開発してるのは偉いと思うけど
操作で自慢されても5年後にはもっと簡単で3日でものになるソフトが出てるかもしれないよ
0276名無しさん@お腹いっぱい。
垢版 |
2008/04/16(水) 03:11:06
あらら、自分の非を指摘されて、それが正しいもんだから逆切れしちゃった訳ね。
まともに反論できないからって、お前の母ちゃんでべそーは無いよな(笑)
0277名無しさん@お腹いっぱい。
垢版 |
2008/04/16(水) 04:20:47
自分で作ったソフトでも無いのにw
使い方知ってるくらいでそこまで威張るか普通?
そんなことぐらいで天狗になる奴リアルではいないよw
ゲームの上手い子供が威張り倒してるのとどう違うんだ???
パソコンソフトの使い方ぐらいでこんなに意地になる連中マジで知らんわw
教えたくなければ知らん顔してればいいのに何が何でも答えるんだね(解答以外はwwwww)
多分、実社会でもずれてんだろなー
キミはた迷惑だと思われてるかもしれないよw
廻りよく見てみw
0280名無しさん@お腹いっぱい。
垢版 |
2008/04/16(水) 05:24:34
おもちゃを上手く使いこなせたから自慢してるって程度じゃないな
頭小学生並みの幼児性w
上から目線が笑えるw
こいつ 奴 プ
笑えるwww
言葉遊びできない奴は何やってもダメって典型
0284名無しさん@お腹いっぱい。
垢版 |
2008/05/15(木) 23:42:43
sedって文全体からある語句を置換するのは簡単だけど、
最初にマッチする語句だけ置換して後はそのまま出力しようとするとちょっと複雑になってしまうよね。
スクリプトの先頭に戻らない様なループを作らないといけない。
0285名無しさん@お腹いっぱい。
垢版 |
2008/05/16(金) 00:20:54
>>284
遠まわしに「最初にマッチする語句だけ置換をする簡易な方法はありませんか?」
って聞いてるのか?それとも独り言ならチラ裏へ。
0287284
垢版 |
2008/05/16(金) 21:22:18
>>286
レスサンクスです。ただ最初の0を1でやった場合はうまくいきませんでした。

s/hoge/fuga/
:loop
p
N
s/.*\n//
b loop
漏れの頭ではこんなのしか思い付きませんでした。
もっとスマートな方法があったら教えてください。
0290名無しさん@お腹いっぱい。
垢版 |
2008/07/07(月) 08:34:28
n文字目のxのみyに置換というのはどうすればいいですか
0291名無しさん@お腹いっぱい。
垢版 |
2008/07/07(月) 08:36:46
n文字目のxとは、
行頭から(n-1)個の文字のあとに出現するx のことか?
行頭からn回目に出現するx のことか?

0293名無しさん@お腹いっぱい。
垢版 |
2008/07/07(月) 12:09:14
前者です
0295名無しさん@お腹いっぱい。
垢版 |
2008/07/07(月) 21:50:58
行頭から4文字目のxをyに
echo xxxxxxxxxx | sed 's/^¥(...¥)x/¥1y/'

行頭から4個目のxをyに
echo x-x-x-x-x | sed 's/¥([^x]*x[^x]*x[^x]*x[^x]*¥)x/¥1y/'

とかとか?

4を変数にするのは漏れには粍
0297290 293
垢版 |
2008/07/08(火) 10:30:38
ありがとうございます
確かに.×4みたいに表現できたらかっこいいですが
これで文句なしです!
0300名無しさん@お腹いっぱい。
垢版 |
2008/08/29(金) 17:04:29
01101,"0600031","ホッカイドウ","サッポロシチュウオウク","キタ1ジョウヒガシ","北海道","札幌市中央区","北一条東",0

01101,"0600031","ホッカイドウ","サッポロシチュウオウク","キタ1ジョウヒガシ","北海道","札幌市中央区","北一条東",0

この第5フィールドの半角英数だけ(2個有る場合もあり)全角にしたいのですが
どのようにsedを作ればいいでしょうか?
0302名無しさん@お腹いっぱい。
垢版 |
2008/08/29(金) 21:15:26
その形式は、郵便屋の郵便番号データだろ。
エクセルか何かの一覧表をcsvに落としただけの代物だから
そのままでは役に立たないよ。
 そのままDBに格納し、専用プログラムで変換かけて正規化してる。
0303名無しさん@お腹いっぱい。
垢版 |
2008/10/08(水) 23:13:50
aaa.hoge
bbb.hage
ccc.foge

とかいう文字列があって、*.hoge以外にマッチする正規表現って出来るのでしょうか?
0305名無しさん@お腹いっぱい。
垢版 |
2008/10/09(木) 21:57:14
>>303

その文を素直に読むと、当該文字列にだけはマッチしない
正規表現と読めるが、書き込み子の心情を忖度すると、
sed 's/[a-c]{3}\.hoge/==matched==/' って事かな?
まあ、[a-c]* でも、(aaa|bbb|ccc) でも、[[:alpha:]]* でも、
マッチする表現は無数に有るけど、(・・に、だけマッチする)
を、求めているなら、そもそも*.hoge って見当外れだし、
要するに、何が知りたいのか良く分からん。
0307名無しさん@お腹いっぱい。
垢版 |
2008/10/27(月) 23:08:07
ファイル内の、スペース+改行をスペースのみに置換したいのですが、
どのように記述すればよいのでしょうか。

データ数が数十万行あるため、ファイルを全部読み込んでから
置換する方法では、容量がオーバーしてしまいました。
0309名無しさん@お腹いっぱい。
垢版 |
2008/10/27(月) 23:29:29
>>308
環境上、Perlを使用することができないんです。
sedでは難しいでしょうか。
0311名無しさん@お腹いっぱい。
垢版 |
2008/10/28(火) 00:07:58
>>310
自分の環境では、\nが認識されませんでした。
0313312
垢版 |
2008/10/28(火) 02:56:53
すまん。勘違いした。

sed はPerlと違って、入力したときに改行を取り除いてからパターンスペースに送るから、
そこで改行探しても見つかりっこない。
んで、出力時に自動的に改行は付くし、これを抑制する手段はない。

せめて awk使っとけ。Perlなくてもawkはあるだろ。
0314312
垢版 |
2008/10/28(火) 02:58:41
すまん勘違いしてた。

sedはPerlと違って入力時に改行を取り除くから、置換時に改行探したって見つかりっこない。
Nとかで次の入力を読んでくれば間に挟まるけど。

0316名無しさん@お腹いっぱい。
垢版 |
2008/10/28(火) 07:09:08
ありがとうございました。
sedでは難しそうですね。別の方法を探してみます。
0321名無しさん@お腹いっぱい。
垢版 |
2009/02/16(月) 16:23:57
sedの公式ホームページってないのでしょうか
awkは一応gawkがあって一応開発も続いているようですが
sedはどのような状態なのでしょうか?
いつまでたっても最短マッチを搭載しない理由もお教えねがいます。
0322名無しさん@お腹いっぱい。
垢版 |
2009/02/16(月) 23:57:10
そういう機能を追加すると、既存のスクリプトが動作しなくなるから。
ポータビリティを失ってまで実装する必要がない。(それこそ、perlでもawkでも使えばいい)
0323名無しさん@お腹いっぱい。
垢版 |
2009/02/17(火) 09:03:12
なるほど、参考になりました。
もし開発に参加できるなら参加したいと思っていたのですが
そのような理由ならそういったときはperlやawkに頼る事にします。
0330名無しさん@お腹いっぱい。
垢版 |
2009/06/29(月) 20:49:52
質問させてください。
sedでホワイトスペースを解除または増やす方法ってあるのでしょうか?
0331名無しさん@お腹いっぱい。
垢版 |
2009/06/29(月) 20:52:21
間違い。ホールドスペースです。
0334名無しさん@お腹いっぱい。
垢版 |
2009/07/03(金) 03:11:56
sedで、
/pattern/r file
ってするとマッチした行の次にfileの内容が出力されますが、
その行の前に出力する方法はないでしょうか?
ちなみにマッチする行は1個しかありません。
0338336
垢版 |
2009/07/04(土) 00:17:53
出てなかった。

sed -n -e 'x;p;g' -e '/pattern/r file' -e '$p'

という感じで最後の行を出力することは出来るけど
patternが最後の行の場合だけ、fileの内容が次行に出ちゃう。
自分はギブアップ
0339名無しさん@お腹いっぱい。
垢版 |
2009/07/04(土) 12:34:06
いろいろありがとうございます。
sed 1個では難しいようですね。
patternより前とpattern以後に別けて、
間にfileをcatするしかないのかもしれません。
0341名無しさん@お腹いっぱい。
垢版 |
2009/09/24(木) 17:28:09
>>295 の例に似てますが、
バイナリファイル(1行めの)4バイトめを ASCII 文字 0x02 -> 0x03 に
変更するにはどうすればいいでしょう?

# sed -e '1s/^\(...\)\x02/\1\x03/' in > out

ではだめでした。
試した環境は FreeBSD 7.2 です。
0344名無しさん@お腹いっぱい。
垢版 |
2009/09/25(金) 10:46:05
>>343
最初の3バイトに改行文字がない保証がないから一般的にはだめそうだな。
やっぱ行指向のsedでバイナリファイルを操作するのは無理があると思う。
0345341
垢版 |
2009/09/25(金) 12:31:36
\x02 などは GNU sed の拡張仕様でした。

 # pkg_add -r gsed
 # rehash
 # gsed -e '1s/^\(...\)\x02/\1\x03/' in > out

でできました。
0346名無しさん@お腹いっぱい。
垢版 |
2009/09/25(金) 12:37:49
>>342-344 ありがとうございます。
>>342 の dd を使った方法は大変参考になります。

あと、
 # sed -e '1s/^\(...\)^V^B/\1^V^C/' in > out
でもできました。
^V^B は <Ctrl>V<Ctrl>B 、
^V^C は <Ctrl>V<Ctrl>C です。
0347名無しさん@お腹いっぱい。
垢版 |
2010/02/20(土) 21:42:41
ひとつ、お聞きいたします。

Nコマンドって、最後の行で次行が読めない場合、何もせず終了、
のはずですよね。すると、
sed 'sed ':l;N;bl' <file>
とすると何も出力されないんじゃないかと思うんですが、
私の使っているGNU sed 4.1.5版だと<file>の全部を出力してしまいます。
つまり、「何もせず終了」じゃなくて、「デフォルト出力して終了」
になっているように思われるわけですが、これは、どうなんでしょうか。
0349名無しさん@お腹いっぱい。
垢版 |
2010/07/01(木) 23:39:24
なるほど
0352350
垢版 |
2010/08/17(火) 23:26:44
そうか、区切り文字変えられるのsコマンドばかりじゃないんですね。
どうもありがとうございました。
0353初心者
垢版 |
2010/10/23(土) 20:01:51
sedでシェルすくりぷとの行つなぎバックスラッシューを消して、繋ぐことできますか?
perlなら-pe "s/\\\n//g"でできます。
edでも、awkでもできれば、教えていただけませんか?
0354名無しさん@お腹いっぱい。
垢版 |
2010/10/24(日) 13:40:00
できる
0355初心者
垢版 |
2010/10/24(日) 21:13:33
できました ありがとう
0356初心者
垢版 |
2010/10/25(月) 22:07:05
できないようですね、残念です。
0357名無しさん@お腹いっぱい。
垢版 |
2010/10/26(火) 19:38:19
sed -e ':lbl' -e '/[^\\]$/b' -e 's/\\$//' -e N -e 's/\n//' -e 'b lbl'

置換パターンに\nを許さない場合は
sed -e ':lbl' -e '/[^\\]$/b' -e 's/\\$//' -e N -e 's/
//' -e 'b lbl'
0359名無しさん@お腹いっぱい。
垢版 |
2010/11/28(日) 18:33:17
sedでファイルのある部分までをファイル1、それ以降をファイル2に出力ってスマートにできませんか?
例えば100行のsample.txtというファイルで、

sed -e "50q" < sample.txt > sample1.txt
sed -e "1,50d" < sample.txt > sample2.txt

の様にするのは無駄におもえてしまいます。
0360名無しさん@お腹いっぱい。
垢版 |
2010/11/28(日) 18:39:52
sed -ne '1,50w sample1.txt' -e '51,$w sample2.txt' < sample.txt
とか?
0363名無しさん@お腹いっぱい。
垢版 |
2010/12/22(水) 23:54:50
入力テキストを

1行目の内容 2行目の内容
2行目の内容 3行目の内容
:
最終-2行目の内容 最終-1行の内容
最終-1行目の内容 最終行の内容

という形(隣り合った行の値を空白で連結する)に変換するにはどう書けば
よいでしょうか。
sed -ne '1!p;$!p'
と通せば先頭末尾以外の行を2回出力できたので、
これを2行分ずつくっつければ出来そうなのですが…
0364名無しさん@お腹いっぱい。
垢版 |
2010/12/23(木) 00:03:02
¥n ってどのsedでも使えるんだっけ?

$ seq 1 10 | sed -ne '1!p;$!p' | sed 'N;s/¥n/ /'
1 2
2 3
3 4
4 5
5 6
6 7
7 8
8 9
9 10
0367名無しさん@お腹いっぱい。
垢版 |
2011/01/15(土) 11:45:22
unixの基礎概念という本の中に
a 21
is 10
this 3
というtest.txtファイルに対して、
sed 's/\(.*\)\( *\)\(.*\)/\3\2\1/' test.txt
とすると結果は
21 a
10 is
3 this
になると書いてありましたが、実行してみると並びはかわりませんでした。
0368名無しさん@お腹いっぱい。
垢版 |
2011/01/15(土) 11:49:07
>>367
確かに。それじゃぁ一番左側の .* が、最長一致で行全体に一致しちゃうから、
並びが変わらなくて正解。

悪書の書名晒して。
0372名無しさん@お腹いっぱい。
垢版 |
2011/01/15(土) 12:01:42
>>371
はいそれです。解説にも
「これはどう読むかというと、『入力行を任意の文字列1と、空白のならび2と、また別の任意の文字列3
にマッチさせ、それ全体を3、2、1の順でつなげたものに置き換える』という意味になる。」と書いてあります。
0377名無しさん@お腹いっぱい。
垢版 |
2011/01/15(土) 12:36:36
>>373
空白2個ならいけるのですか。

>>376
そういう、└┘└┘みたいな感じはなかったです。文字数的にも一文字分の感じ
ですし。編集上のミスかもしれませんけど。
0381名無しさん@お腹いっぱい。
垢版 |
2011/01/15(土) 14:34:38
>>378
正規表現を理解してないバカ発見。

任意の文字列 → \1
空白の並び → \2
別の任意の文字列 → \3

と言ってるだけのこと。それとスペース2つ書くのとは意味が違う。
0383名無しさん@お腹いっぱい。
垢版 |
2011/03/25(金) 20:16:28.23
任意の文字列の前か後ろの少なくともどちらかは、任意でない特定の文字・文字列(含^$)でないと困ったことになるということですね?
俺も前それで失敗した。
0384名無しさん@お腹いっぱい。
垢版 |
2011/04/21(木) 06:41:06.41
sedの話題はこっちへ
くれぐれもシェルスクリプトスレに書き込まないように!
0387名無しさん@お腹いっぱい。
垢版 |
2011/04/27(水) 12:11:27.62
>>386
sed -e "s/1/0/g"
0388名無しさん@お腹いっぱい。
垢版 |
2011/04/27(水) 12:35:36.38
>>386
> sed -e 's/BBB=111/BBB=000/'
これじゃ、お題
> この行の111を000に置き換えするのに
を満たさない。

矛盾を含む質問に答えることは不可能。
0389386
垢版 |
2011/04/27(水) 13:29:23.92
>この行の111を000に置き換えするのに
この行のBBB=111だけをBBB=000にする書式でした
すいません。
0394名無しさん@お腹いっぱい。
垢版 |
2011/05/18(水) 23:11:59.71
sed -e 's/<space><space>*/<space>/g' test.txt
って動かないんですが?
0396名無しさん@お腹いっぱい。
垢版 |
2011/05/19(木) 10:16:19.05
EUCだとうまく動作しないのだが、これはデフォルトなのかな
0398名無しさん@お腹いっぱい。
垢版 |
2011/05/19(木) 17:40:32.75
そもそも、EUCはそういうツールで不都合がないようにということで作られたわけで。
日本語独特の文節や漢字などに対応しない、というのはあるけど。
0403401
垢版 |
2011/05/19(木) 20:27:32.13
>402 それは別人です
0404401
垢版 |
2011/05/30(月) 17:29:13.86
偽物ばかり
氏ね
0416名無しさん@お腹いっぱい。
垢版 |
2011/11/30(水) 15:38:55.31
>>415
というかexpandを知らなかったからこそ
「tab8のテキストをインデントを崩さずに…」みたいな
まわりくどい言い方で聞いたんでしょ。
だからsedに関係なくexpandを回答すれば回答として十分。
0419408
垢版 |
2011/11/30(水) 17:44:22.28
すっごく登場しにくくなったけど>>415さんが正解です。

>>409
エスパーさんありがとう。

皆さん混乱させてスイマセンでした。置き換えと言えばsedしか知らなかったので。
0420名無しさん@お腹いっぱい。
垢版 |
2012/04/06(金) 20:12:58.82
文字列unkoの行を見つけてから文字列chinkoの行まで表示
ってどうやればいいの?
0421名無しさん@お腹いっぱい。
垢版 |
2012/04/06(金) 20:38:54.03
>>420
当たり前過ぎるから回答は控えるけど、
エスパーすると -n オプション忘れて全部の行が表示されてしまったってオチだろな
0422名無しさん@お腹いっぱい。
垢版 |
2012/04/06(金) 23:35:46.08
そんなことなくてその当たり前すぎる内容がわからない初心者さんなんでしょう。
回答してあげないなんてひどいね
0436名無しさん@お腹いっぱい。
垢版 |
2012/08/06(月) 23:45:58.92
教えてください!
テキストファイルの最後にある空行を削除するにはどうすればいいですか?
$ sed -n ' 105,$p' Ga.inp
search.LowerE -3.000 # default=-3.000 (Hartree)
search.UpperE 20.000 # default=20.000 (Hartree)
num.of.partition 1200 # default=300
matching.point.ratio 0.67 # default=0.67











の様に、最後に無駄な空行のあるファイルがたくさんあって、一括削除したいのです。
ただし、途中にある改行は、ファイルの見やすさのために残しておきたいのです。
ed で言えば
$;?^.?;+,$d
で出来ると思うのですが、sed では';'や'+'が使えず、どうしてよいやら・・・
0437名無しさん@お腹いっぱい。
垢版 |
2012/08/07(火) 00:42:37.55
パターンスペースが
空行だったらホールドスペースに追加
空行でなかったらホールドスペースを出力後にパターンスペース出力

最後の連続空行はホールドスペースに収まったままで終わる。

とか考えてみたがあってるだろうか。
0439名無しさん@お腹いっぱい。
垢版 |
2012/08/07(火) 22:00:53.40
>>437
多分やりたいのはそれだと思います。
具体的に同書けばいいのでしょう?
0440名無しさん@お腹いっぱい。
垢版 |
2012/08/08(水) 02:01:32.99
もうawkかなにかで済ましてるだろうけど練習
437とは違うやり方になった
sed -n -e '
:loop
/^\n*$/{
N
b loop
}
p
'
0442名無しさん@お腹いっぱい。
垢版 |
2012/08/17(金) 16:05:21.04
gsedですが、
ブラケット開きがあって、ブラケット閉じ以外のものが1つ以上あって、ブラケット閉じがある場合、
で、これどこがおかしいのでしょうか? ★☆が現れてくれないんですけど。
s/\[\([^\]][^\]]*\)]/[★\1☆]/g
0444名無しさん@お腹いっぱい。
垢版 |
2012/08/17(金) 16:43:13.83
ありがとうございます。
つまり、[ と ] の間にあるものはどんなものでも
「これは文字です」と宣言しなくてもいい(\が要らない)ということですか。
やってみます。ありがとうございました。
0446名無しさん@お腹いっぱい。
垢版 |
2012/08/17(金) 18:35:40.56
テキスト   [aaa], [bbb] <あああ>の(アアア)と<いいい>の(イイイ)
欲しい結果 ★aaa☆, ★bbb☆ ★あああ☆の★アアア☆と★いいい☆の★イイイ☆
s/[<[(]\([^<>[]()][^<>[]()]*\)[>])]/★\1☆/g
予想はしたけど、まるで反応してくれません。
半角の約物3種類は欲張ったかなあ、と1つずつやってみているところです。
0447名無しさん@お腹いっぱい。
垢版 |
2012/08/17(金) 18:37:54.56
>>446
>>445 に書いてあること読めよ。

[^ の直後に ] を置かないと、普通の文字としては認識されないんだよ。
[^....] の中の .... の順番を変えろということ。
0448名無しさん@お腹いっぱい。
垢版 |
2012/08/17(金) 18:41:47.66
>>446
s/[[<(]\([^]<>()][^]<>()]*\)[]>)]/★\1☆/g
0451名無しさん@お腹いっぱい。
垢版 |
2012/08/20(月) 16:08:01.31
ごめんなさい。>>446は[]の中の[]に全部\を付けたつもりでした(このミスが大元ですね)

エスケープすればどの位置にあっても文字とするというsedを使っていたのと、
最長一致の正規表現も使っていたので混乱してしまいました。
「直後」を何度も言われていたのに、「直後『だけ』」に思いが至りませんでした。
0452名無しさん@お腹いっぱい。
垢版 |
2012/10/25(木) 06:00:58.34
gsed で、置換コマンドの s を間違えて a と入力したスクリプトを実行したら、
一行ごとにその行が挿入されていて笑ってしまった。
a コマンドなんて知らなかったわ。
0456名無しさん@お腹いっぱい。
垢版 |
2012/10/25(木) 23:53:29.32
aなんて、edの基本じゃん!
0458名無しさん@お腹いっぱい。
垢版 |
2012/11/05(月) 10:24:08.04
質問があります

テキストファイルaaaの中身

<hoge>
abc
</hoge>

<hoge>
def
</hoge>

これを

<hoge>
def
</hoge>

のようにabcのタグだけ削除したい

sed -i "/^<hoge>\n abc\n<\/hoge>/d" aaa

これでは削除できませんでした。
改行を含む文字列を削除する場合どうしたらいいでしょうか?
0462名無しさん@お腹いっぱい。
垢版 |
2012/11/05(月) 14:31:53.41
>>459-461
ありがとうございます
しかし削除できませんでした
ちなみにsedじゃなくて何でやったほうがいいでしょうか?
0464名無しさん@お腹いっぱい。
垢版 |
2012/11/05(月) 14:56:37.97
>>463
はい。ありがとうございます。できればシェルスクリプトで書きたいので
PerlでもRubyでも何でもいいとは思いますがそれ以外でいいコマンドはありませんでしょうか?
0468名無しさん@お腹いっぱい。
垢版 |
2012/11/06(火) 04:00:03.51
>>458
aaaがXMLならXMLパーサ(を使える言語)を使った方がいいと思う
/<hoge>/!b
:loop
$b last
/<\/hoge>/!{
N
b loop
}
:last
s/<hoge>[ \n\t]*abc[ \n\t]*\(<\/hoge>\)*//g
0469名無しさん@お腹いっぱい。
垢版 |
2012/11/20(火) 09:09:15.11
すみません。教えて下さい。
テキストの最終行のあとに空白行を1行入れる、というのはどう書くのでしょうか。
iコマンドでは最終行の前に空白行ができてしまいます。
0477名無しさん@お腹いっぱい。
垢版 |
2013/01/04(金) 12:52:49.06
"foo"の在る行だけを対象にするから?
どのみち見つけに行くんだから同じじゃん?と想ったり想わなかったり
0481478
垢版 |
2013/01/05(土) 10:26:37.21
1億行、954MBのファイルでやってみた

$ seq -w 100000000 > large.txt
$ sed --version | head -1
sed (GNU sed) 4.2.2
$ grep '111' large.txt | wc -l
549739

$ for i in {1..3}; do time sed 's/111/999/g' large.txt > /dev/null; done
sed 's/111/999/g' large.txt > /dev/null 28.68s user 0.77s system 80% cpu 36.731 total
sed 's/111/999/g' large.txt > /dev/null 28.75s user 0.68s system 82% cpu 35.666 total
sed 's/111/999/g' large.txt > /dev/null 27.99s user 0.61s system 81% cpu 35.067 total

$ for i in {1..3}; do time sed '/111/ s/111/999/g' large.txt > /dev/null; done
sed '/111/ s/111/999/g' large.txt > /dev/null 27.68s user 0.63s system 82% cpu 34.418 total
sed '/111/ s/111/999/g' large.txt > /dev/null 27.96s user 0.72s system 57% cpu 49.912 total
sed '/111/ s/111/999/g' large.txt > /dev/null 28.84s user 0.71s system 81% cpu 36.287 total
0482名無しさん@お腹いっぱい。
垢版 |
2013/04/08(月) 00:25:48.59
>type diff
diff is /usr/bin/diff
> type diff | sed 's,[()],,g;s,^[^/][^/]*,,;q'
/usr/bin/diff
s,[()],,g;s,^[^/][^/]*,,;q'
ってどう解釈すれば良いんですか?
0484名無しさん@お腹いっぱい。
垢版 |
2013/05/21(火) 06:44:35.71
Macでgsedを使っています。やりたいこと
★のある行と☆のある行の間にある行のうち、ひらかなを含む行の行頭に@を付ける。
(ひらかなが1文字でも入っていれば良い)

/★/,/☆/{
/[あ-ん]/s/^/@/
}

無視されてしまうんです。助けてください。
0485484
垢版 |
2013/05/21(火) 08:34:08.57
[あ-ん]がいけなかったみたいです。[あいうえお(中略)ん、。]でできました。
0489名無しさん@お腹いっぱい。
垢版 |
2013/05/22(水) 16:53:09.99
ssedって次期GNU sedのこと。
GNUのページでもこの拡張には依存するなって書いてる。
ただ、macでBSD系のsedじゃなくGNU sed使ってるんなら
port依存って意味ではあんまり変わんないんじゃない?
0491名無しさん@お腹いっぱい。
垢版 |
2014/06/03(火) 18:27:21.57
gnuWin32のsed version4.2.1です
sedで、"を入れたくて下記のようにしたのですが、うまくいきません。どうしてでしょうか

sed -e "s/^/ \"/" hoge.txt > hoge2.txt

エスケープの\がうまく利かず、
sed: >を読み込めません
というわけわからんエラーメッセージが出てきます
ちなみに、

sed -e "s/^/ \\/" hoge.txt > hoge2.txt

とかならちゃんと動きます
0492名無しさん@お腹いっぱい。
垢版 |
2014/06/28(土) 14:33:09.63
>>491
UNIX板で答えない方が良いのかもしれませんが、適当なスレが無さそうなので
windows のコマンドプロンプトで実行しているとして答えます。

cmd.exe の仕様が原因と思われる
sed -e "s/^/ "^""/" hoge.txt > hoge2.txt
0493名無しさん@お腹いっぱい。
垢版 |
2014/06/28(土) 14:56:57.91
sedを使用する際の注意事項があります。
コンピュータのCPUが何ビットであるか調ベておく事が大切です。

32ビットCPUを搭載したコンピュータには、
32ビット用のsedをインストールすること。

64ビットCPUを搭載したコンピュータには、
64ビット用のsedをインストールすること。

これを間違えれば正常にsedが動作しません。
0494名無しさん@お腹いっぱい。
垢版 |
2014/08/20(水) 00:07:25.20
sedの使い方がわからず、試行錯誤しているのですが、うまくいきません。
行の先頭に特定の文字列(たとえば"abc")があったらその行を丸ごと"xxxxxxxxxxx"に置換するにはどうすれば良いでしょうか。

例:
abc123456

xxxxxxxxxxx
に変換さえるイメージです。
0496名無しさん@お腹いっぱい。
垢版 |
2014/08/20(水) 01:39:49.69
パイプで使うバージョンを書く
|sed 's/^abc.*/xxxxxxxxxxx/'
0502名無しさん@お腹いっぱい。
垢版 |
2014/10/21(火) 08:56:25.00
バックスラッシュって読みやすいか?日本語だと使い道無いし。

プログラミングで正規表現書いてると、
s/\dhoge\sfuga\s/hoge/
↑似たような記号ばっかりで読みづらいw

s/¥dhoge¥sfuga¥s/hoge/
↑こっちのほうが読みやすい
0505名無しさん@お腹いっぱい。
垢版 |
2014/10/21(火) 13:00:32.47
スラッシュとバックスラッシュが紛らわしいんならスラッシュ以外の
文字を区切りに使えばいいんでないの?
0507名無しさん@お腹いっぱい。
垢版 |
2014/11/06(木) 07:19:05.88
1,/hoge/ のようにaddressに正規表現を使う時のスラッシュを
他の記号に変えることはできますか?
s@http://@https://@ のようなことをしたいのです
0511名無しさん@お腹いっぱい。
垢版 |
2014/12/23(火) 16:27:26.38
他人が書いたコードで、例えば文字列が、
11 AAA [BBB] CCC/DDD.txt EEE FFF-01
だった場合に、ここから[]内の文字(BBB) を抜き出すために、
sed -e 's/\[//g' -e 's/\]//g' | awk '{ print $3 }'
というスクリプトで BBB を取得しています。

このスクリプトを変更して、DDD を取得したいのですが、
どう書けば良いのでしょうか?
0514名無しさん@お腹いっぱい。
垢版 |
2014/12/28(日) 06:55:35.52
>>507
1,\@hoge@

linuxで確認済み
検索でここにたどり着いた人の為と、何処のコピペか検索してもそれらしいものが出なかったので、貼っておきます

POSIX
sed
http://pubs.opengroup.org/onlinepubs/9699919799/utilities/sed.html
In a context address, the construction "\cBREc", where c is any character other than <backslash> or <newline>, shall be identical to "/BRE/".
If the character designated by c appears following a <backslash>, then it shall be considered to be that literal character,
which shall not terminate the BRE. For example, in the context address "\xabc\xdefx", the second x stands for itself,
so that the BRE is "abcxdef".

BSD
On-line Manual of "sed"
http://www.jp.freebsd.org/cgi/mroff.cgi?subdir=man&;lc=1&cmd=&man=sed&dir=jpman-5.4.0%2Fman&sect=0
1. コンテキストアドレスにおいて、バックスラッシュ (``\'') と改行以外の 文字を正規表現の区切りとして用いることできます。
区切り文字の直前に バックスラッシュを置くことで、区切り文字をリテラルに解釈させることが できます。
たとえば、コンテキストアドレス \xabc\xdefx において、区切 り文字は ``x'' で、2つめの ``x'' は ``x'' という文字を表します。
よっ て、正規表現は ``abcxdef'' と解釈されます。

LINUX
Man page of SED
http://linuxjm.sourceforge.jp/html/GNU_sed/man1/sed.1.html
/regexp/
正規表現 regexp にマッチした行にマッチする。
\cregexpc
正規表現 regexp にマッチした行にマッチする。c には任意の文字を指定できる。
0516名無しさん@お腹いっぱい。
垢版 |
2016/02/10(水) 23:22:09.08
どうにも理解が出来ず教えて欲しいのですが
http://sed.sourceforge.net/sed1line.txt

から
# print paragraph if it contains AAA (blank lines separate paragraphs)
sed -e '/./{H;$!d;}' -e 'x;/AAA/!d;'

これがどうにもわかりません。
H;$!d;の$!dが何故必要なのか?
動作の流れを教えて頂けないでしょうか?
0517516
垢版 |
2016/02/21(日) 00:09:27.85
age
0519名無しさん@お腹いっぱい。
垢版 |
2016/02/21(日) 10:27:51.16
dがあるのは段落の区切りまで何も出力させないため

ファイル末尾も段落の区切りだから$!が要る
ファイル末尾に必ず空行があるなら$!は要らない

dでそのサイクルが終了することは知ってますね?
0523516
垢版 |
2016/02/21(日) 16:55:28.79
>>519
有り難うございます。助かりました。
!dをpの様に認識してしまっていて次のサイクルに移行させる
イメージがなく、$!dを最終行を表示させるとしか思ってなくて
色々試してもどうにも腑に落ちないもので質問させて頂きました。
0524名無しさん@お腹いっぱい。
垢版 |
2016/04/28(木) 22:19:31.31
sedで桁そろえってどうしたらいいですかる
具体的にはls -l で出てきた結果のうち、ファイル名を最初に左揃え、ファイルサイズを右揃えで出力したいのですが、
sedコマンドだけで可能ですか?
0526名無しさん@お腹いっぱい。
垢版 |
2016/04/29(金) 07:15:23.81
どうしてもsedだけでやたいんです!
お願いします!
0527名無しさん@お腹いっぱい。
垢版 |
2016/04/29(金) 07:58:13.44
UNIX哲学に戻るんだ。
1つのことをうまくやる、ものを組み合わせればいいんだから、まずはawkでやってみる。
0529名無しさん@お腹いっぱい。
垢版 |
2016/04/29(金) 08:29:01.55
ありゃ? 記号があると書き込みが切れる。記号を全角にした。半角に直して読んでね。

ls -l | while read m l u g s t1 t2 t3 f
do
printf ”%-20s %8d %s\n” ”$f” ”$s”
done
0531名無しさん@お腹いっぱい。
垢版 |
2016/04/29(金) 10:02:30.45
sedでの右揃えは、一旦中身のみを切り出してから左側に余分なスペースを加えてから
右から文字数固定で切り取る。
左揃えはその逆。
0532名無しさん@お腹いっぱい。
垢版 |
2016/08/11(木) 22:51:26.97
>>144の更新 NetBSDとOpenBSDの標準sedで-iが導入。
入力ファイルを書き換えるには?

・-i オプションをつかう
・-i オプションがないsedをつかっているなら in-place editing 対応の sed の導入を検討する
・ed を使うことを検討する
・perl を使うことを検討する
・一時ファイルを必要としないファイル命名法を検討する
http://www.idaemons.org/projects/inplace/  を使う
・(rm hoge.dat; sed 's/aaa/bbb/' > hoge.dat) < hoge.dat

FreeBSD の標準 sed に -i オプションが取り入れられたのは 4.7R でそれ以前には無い。
NetBSD の標準 sed に -i オプションが取り入れられたのは 7.0 でそれ以前には無い。
OpenBSDのの標準 sed に -i オプションが取り入れられたのは 5.8 でそれ以前には無い。
MacOSX の 標準 sed は FreeBSD 由来なので元になるバージョンに依存する。
MacOSX 10.3以降は FreeBSD 5.1R由来なので、 -iオプションはある。
以前のGNU sed には in-place editing 機能はない (Changelog によると 2001-09-25 ) (3.02には in place オプションは無い)
0533名無しさん@お腹いっぱい。
垢版 |
2017/03/17(金) 14:26:32.28
データハンドリングとしては、
入力ファイルをコピーして更新をかける
更新処理が終わったら、入力ファイルを削除して更新ファイルをりネームして入力ファイルとする
みたいな方法で必要十分。
なんでもかんでもツールで処理するのではなく、OSが得意な機能はOSのものを使う。
クラッシュがいつ起こってもデータが確保できるのは、そういう、むしろドンくさい方法。
お遊びならいざしらず、仕事では安全確実性が少しでも高い方を選ぶのがプロ。

無論、履歴から復元なんてのも、データによっては必要だが、
処理が複雑になれば、一般的にトラブルも増える。
どこまで何をやるかは、ひとえにそのデータの重要性にかかっている。
バックアップから戻してもたいした事がないなら、何やってもいいだろう。
0537名無しさん@お腹いっぱい。
垢版 |
2017/12/29(金) 10:21:45.77
誰でも簡単にパソコン1台で稼げる方法など
参考までに、
⇒ 『宮本のゴウリエセレレ』 というブログで見ることができるらしいです。

グーグル検索⇒『宮本のゴウリエセレレ』

8DL33JQ0HX
0540538
垢版 |
2018/01/18(木) 13:11:30.41
>>539
ありがとうございます。とりあえずその路線で行きます。
素人目にはiフラグとdフラグを同時に使えないというのは極めて不自然というか
非対称な気もしますが……
二つの役割は直交関係にあって,別に依存・背反はないと思うんですよねぇ。
0542538
垢版 |
2018/01/18(木) 16:43:03.48
$ printf '%s\n%s\n%s\n' 'AAA' 'Bbb' 'aaa' | gsed -e '/a/Id'
Bbb

おおおおおお!ありがとうございます。Iフラグは知りませんでした!
しかしこれ GNU の独自拡張なんですよねぇ……欲を言えばPOSIX標準に従いたかったんです……
すいません。とりあえず>>539の一文字づつ手動で置き換えるというやりかたで通します。
そして今気付いたんですが iという文字はフラグだけでなくて「行挿入」というコマンドとしての
解釈もあるんですね。だから「id」でdが当該箇所に挿入された形になったんですね。
馬鹿だなぁ俺
0544542
垢版 |
2018/01/19(金) 16:10:54.99
>>543
あーその通りですわ。
逆になぜ id で大文字小文字を無視して削除ができると思ったのか疑問なくらい阿呆でした……。
精進し直します。

# 素人考えで言うと「大文字小文字を無視して検索→その行でコマンド実行」なんて頻繁に実行するだろうに
それに対応した機能が (POSIXの範囲で) 存在しないってのはちょっと頂けないですねぇ……
# 尤も上級者の方々は他の,もっと優美な方法を採ってらっしゃるのかも知れませんが。
0545名無しさん@お腹いっぱい。
垢版 |
2018/02/03(土) 04:17:58.88
ある文字がある回数続く*行*を置換することってできないんでしょうか。
...
xbcea
aaa
aaa
aaa
dkjef
...
↑このようなファイルで、
cat ./file | sed -e 's/aaa\naaa\naaa/bbb/g'
とやることで
...
xbcea
bbb
dkjef
...
このような出力が得られることを望んでいるのですが、上記のコマンドでは無理でした。> <
ご教授願いますm(_ _)m
0547名無しさん@お腹いっぱい。
垢版 |
2018/02/14(水) 10:22:09.93
☆ 日本の、改憲をしましょう。現在、衆議員と参議院の両院で、
改憲議員が3分の2を超えております。『憲法改正国民投票法』、
でググってみてください。国会の発議はすでに可能です。
平和は勝ち取るものです。お願い致します。☆☆
0548名無しさん@お腹いっぱい。
垢版 |
2018/05/22(火) 03:04:16.83
知り合いから教えてもらったパソコン一台でお金持ちになれるやり方
時間がある方はみてもいいかもしれません
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』

9M87D
0550名無しさん@お腹いっぱい。
垢版 |
2018/08/31(金) 10:07:25.21
sedはストリームエディタ
grepは文字列検索
awkはスクリプト言語
0551名無しさん@お腹いっぱい。
垢版 |
2018/12/13(木) 22:08:13.14
| sed -n -e "/<station /h;/<prog /{N;G;s/\n//gp}" ^

この行の後ろに<pfm>から始まる行をくっつけたいんですが、
すごく難しくてどうやっても出来ないです
どうやればいいんでしょうか?
0553名無しさん@お腹いっぱい。
垢版 |
2018/12/14(金) 00:49:07.99
>>552
nkf.exeを併用しているバッチ内のコードをコピペしただけなので、|と^は関係ないです

>>551ではxmlファイル内の「<station〜>タグで始まる行」と
「<prog〜>タグで始まる行+その次の行」を1行の文字列に連結しているので、
さらにその後ろに<pfm>タグで始まる行を連結して1行にしたい、ということです
(この後に正規表現で最終的にcsv形式に置換しますが割愛)
0556名無しさん@お腹いっぱい。
垢版 |
2019/02/09(土) 12:27:35.91
10年以上前にファイル内容を逆順に表示するスクリプトコピペしたけど '1!G;h;$!d'
未だに内容理解できてないぜ!
0560名無しさん@お腹いっぱい。
垢版 |
2019/03/19(火) 12:52:18.64
GNU sedじゃなくて、BSDsedをビルドしたい。

OS付属の/usr/binソースはあるけど
https://github.com/freebsd/freebsd/tree/master/usr.bin/sed
sed単体がない。

ビルド出来るBSDsedのURLを教えてください
0562名無しさん@お腹いっぱい。
垢版 |
2019/03/19(火) 13:55:05.58
>>561
make -f MakefileしだんたけどカレントディレクトリのMakefileはそのままでは使えなかった。
オプションが必要なのかも知れないが、よくわからず。
0563名無しさん@お腹いっぱい。
垢版 |
2019/03/19(火) 19:46:54.93
>>562
FreeBSD のソース用の Makefile は BSD make 用で GNU make では使えないよ。
なんの OS を使ってるのかわからいけど、
pkgsrc が対応している OS なら pkgsrc 導入して、
textproc/nbsed をインストールするのが一番楽だと思う。

http://pkgsrc.org/
0564名無しさん@お腹いっぱい。
垢版 |
2019/03/20(水) 04:19:12.82
>>563
MacOSです。ソース側で単体ビルドできる用意されていれば出来ると考えました。
早速挑戦して上手く行ったらここに報告します。
0565名無しさん@お腹いっぱい。
垢版 |
2019/03/20(水) 04:24:16.70
>>563
>FreeBSD のソース用の Makefile は BSD make 用で GNU make では使えないよ。

これ当たってた。BSDの本家に問い合わせたら560のURLにあるsedのmakefileはOS用らしい。
自分で一からconfigureやmakefileを用意すればビルド出来るのかもね。

sedの最新版を使いたかったが時間あるときに563を試します。
0566名無しさん@お腹いっぱい。
垢版 |
2019/03/20(水) 04:45:39.59
Makefileの中見てgcc一発でも行けんだろって気がするが
って自分は前それやってみた気もするが
それくらい試せよ
0567名無しさん@お腹いっぱい。
垢版 |
2019/03/20(水) 07:03:53.34
>>566
確か、Linux のcore utilとかだとconfigure sedみたいなかんじで、コマンドの単独コンパイルできる。
manにかかれているメアドでBSDの本家に問い合わせたら
単独コンパイル出来ないとの返事だった。OSビルド用らしい

もう消してしまったが、成功した人がいたら教えてほしい。方法がわかれば再試行する気はあります
0569名無しさん@お腹いっぱい。
垢版 |
2019/03/26(火) 09:49:12.30
別にageでもいいよ
0574名無しさん@お腹いっぱい。
垢版 |
2019/07/02(火) 22:35:36.02
560です。572のとおりビルドできました。

インストール済のMac版sedは2004年頃なのでバージョンアップできて助かります。
これから100近くあるソースを調べます。

linux版との互換性ない記述を書いてしまいました。
gnu sedもMac上ではビルドできていませんが諦め。
0575名無しさん@お腹いっぱい。
垢版 |
2019/07/02(火) 23:46:07.78
マジかよ
gnu sedなんてそれこそ./configureしてmakeだけじゃん
--program-prefix=gくらいつけといた方がいいだろけどさ
058030GBでも大丈夫 thanks sed
垢版 |
2019/07/06(土) 21:39:28.25
sed -n '10509757p' primes
2147483563 2147483579 2147483587 2147483629 2147483647-2147483648-2147483647-2147483646-2147483645-2147483644

OFやらかした最終行
...
-1800706952-1800706951-1800706950-1800706949-1800706948-1800706947-1800706946-1800706945-1800706944-1800706943

sed -ie '10509758,$d' primes
0581名無しさん@お腹いっぱい。
垢版 |
2021/09/08(水) 17:50:49.92
sedのホールドスペースは、その内容を削除するにはどうすれば?
とりあえずs/.//g;xでできたけど、もっと直接的なやりかたはないんかなー、と。
0582名無しさん@お腹いっぱい。
垢版 |
2021/09/08(水) 17:54:36.56
sedスクリプトファイルでよく使われる拡張子はあります?

ほとんどコマンドラインに-eで書ききるものでしょうが、あえてファイルにするとしたらやっぱりsed?
0583名無しさん@お腹いっぱい。
垢版 |
2021/12/25(土) 09:31:39.87
>>582
別にこだわる必要はないけど
各種sed処理系付属のexamplesとか覗くとみんな.sedなので、あえて正書法にこだわるならやはり.sedかと
実装を隠したコマンドとして纏めたい、常に特定のオプション(-i等)で起動したい、主コードとsedの拡張チェック等を分離したいならenvを使うとよい
sedによってはオプションを重ねられたり重ねられなかったりするので
#! /usr/bin/env -S sed -f (-i -n -e 'check')
0585名無しさん@お腹いっぱい。
垢版 |
2023/02/05(日) 22:38:55.04
onigsed がダウンロードできなくて困ってます。
0587名無しさん@お腹いっぱい。
垢版 |
2024/03/27(水) 19:48:02.41
たどり着けない境地だ
0588名無しさん@お腹いっぱい。
垢版 |
2024/03/27(水) 19:55:02.09
それらが引退した人も逮捕されてるの見つかって捕まって誰かに相手されないもんね
ヒスンは凄く特殊な銃を使って
0589名無しさん@お腹いっぱい。
垢版 |
2024/03/27(水) 21:38:04.20
4232
じり下げはやめて良い部屋は空いてるんだったら
胃がびっくりしておかしくなる
家庭崩壊する
それが政治とどう関係あるのが信じられなくなったから焦った
レスを投稿する


ニューススポーツなんでも実況