sed (606レス)
1-

1: 04/05/28 16:56 AAS
sedスレッド
507
(1): 2014/11/06(木)07:19 AAS
1,/hoge/ のようにaddressに正規表現を使う時のスラッシュを
他の記号に変えることはできますか?
s@http://@https://@ のようなことをしたいのです
508: 2014/11/06(木)08:27 AAS
>>506 にあるようにできない。
509: 2014/11/06(木)08:42 AAS
できる実装もあるかもしれない
510: 2014/11/06(木)09:21 AAS
コピペ改変にかまうな
511: 2014/12/23(火)16:27 AAS
他人が書いたコードで、例えば文字列が、
11 AAA [BBB] CCC/DDD.txt EEE FFF-01
だった場合に、ここから[]内の文字(BBB) を抜き出すために、
sed -e 's/\[//g' -e 's/\]//g' | awk '{ print $3 }'
というスクリプトで BBB を取得しています。

このスクリプトを変更して、DDD を取得したいのですが、
どう書けば良いのでしょうか?
512: 2014/12/23(火)19:23 AAS
s,.*/,,; s,\.txt.*,,
513: 2014/12/24(水)15:41 AAS
ありがとう
514: 2014/12/28(日)06:55 AAS
>>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 には任意の文字を指定できる。
515: 2014/12/28(日)17:04 AAS
おおお、グレート義太夫
516
(2): 2016/02/10(水)23:22 AAS
どうにも理解が出来ず教えて欲しいのですが
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が何故必要なのか?
動作の流れを教えて頂けないでしょうか?
517: 516 2016/02/21(日)00:09 AAS
age
518: 2016/02/21(日)01:34 AAS
タダで教えろって?
519
(1): 2016/02/21(日)10:27 AAS
dがあるのは段落の区切りまで何も出力させないため

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

dでそのサイクルが終了することは知ってますね?
520: 2016/02/21(日)10:54 AAS
10日も呆けーと待ってたことに驚き
521: 2016/02/21(日)13:02 AAS
でも教えてもらえたじゃないかw
522: 2016/02/21(日)14:02 AAS
自分で試せば小一時間で気付くのに、と思う
523: 516 2016/02/21(日)16:55 AAS
>>519
有り難うございます。助かりました。
!dをpの様に認識してしまっていて次のサイクルに移行させる
イメージがなく、$!dを最終行を表示させるとしか思ってなくて
色々試してもどうにも腑に落ちないもので質問させて頂きました。
524: 2016/04/28(木)22:19 AAS
sedで桁そろえってどうしたらいいですかる
具体的にはls -l で出てきた結果のうち、ファイル名を最初に左揃え、ファイルサイズを右揃えで出力したいのですが、
sedコマンドだけで可能ですか?
525: 2016/04/29(金)06:51 AAS
そういうのは awk で。
526: 2016/04/29(金)07:15 AAS
どうしてもsedだけでやたいんです!
お願いします!
527: 2016/04/29(金)07:58 AAS
UNIX哲学に戻るんだ。
1つのことをうまくやる、ものを組み合わせればいいんだから、まずはawkでやってみる。
528: 2016/04/29(金)08:26 AAS
awkでもいいが、シェル内部コマンドだけでもできるぞ。

ls -l | while read m l u g s t1 t2 t3 f
do
printf
529: 2016/04/29(金)08:29 AAS
ありゃ? 記号があると書き込みが切れる。記号を全角にした。半角に直して読んでね。

ls -l | while read m l u g s t1 t2 t3 f
do
printf ”%-20s %8d %s\n” ”$f” ”$s”
done
530: 2016/04/29(金)09:51 AAS
FreeBSD$ stat -f %-20N%8z *

Linux$ stat -c %-20n%8s *
531: 2016/04/29(金)10:02 AAS
sedでの右揃えは、一旦中身のみを切り出してから左側に余分なスペースを加えてから
右から文字数固定で切り取る。
左揃えはその逆。
532: 2016/08/11(木)22:51 AAS
>>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 オプションは無い)
533: 2017/03/17(金)14:26 AAS
データハンドリングとしては、
入力ファイルをコピーして更新をかける
更新処理が終わったら、入力ファイルを削除して更新ファイルをりネームして入力ファイルとする
みたいな方法で必要十分。
なんでもかんでもツールで処理するのではなく、OSが得意な機能はOSのものを使う。
クラッシュがいつ起こってもデータが確保できるのは、そういう、むしろドンくさい方法。
お遊びならいざしらず、仕事では安全確実性が少しでも高い方を選ぶのがプロ。

無論、履歴から復元なんてのも、データによっては必要だが、
処理が複雑になれば、一般的にトラブルも増える。
どこまで何をやるかは、ひとえにそのデータの重要性にかかっている。
バックアップから戻してもたいした事がないなら、何やってもいいだろう。
534: 名無しさん@そうだ選挙に行こう! Go to vote! 2017/10/22(日)14:32 AAS
>>274
どうだろうね。数式の入った文章を写植
は、昔の印刷物のほうが上でしょ。
印刷屋に頼んでもtexの設定をそのまま
つかわずindesignに読み込むから、
ひどいものだ
535: 名無しさん@そうだ選挙に行こう! Go to vote! 2017/10/22(日)15:59 AAS
昔も今もTeXでやってくれる印刷屋に頼めばいいじゃん。
536: 2017/12/08(金)20:25 AAS
今も昔も餅屋のふりした餅屋はたくさんあるからな〜。餅の見る目のない会社だったってことで。
537: 2017/12/29(金)10:21 AAS
誰でも簡単にパソコン1台で稼げる方法など
参考までに、
⇒ 『宮本のゴウリエセレレ』 というブログで見ることができるらしいです。

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

8DL33JQ0HX
538
(2): [age] 2018/01/18(木)12:08 AAS
2chスレ:unix
ここから来ました。
sedでiフラグとdフラグを両方立てることってできないのでしょうか。
$ cat file
aaa
AAA
$ cat file | sed -e '/aaa/id'
AAA
d
aaa
539
(2): 2018/01/18(木)12:57 AAS
頑張って /[Aa]\{3\}/d と書く
今時の正規表現修飾子とか使えるsedがあるなら俺も知りたい
540: 538 2018/01/18(木)13:11 AAS
>>539
ありがとうございます。とりあえずその路線で行きます。
素人目にはiフラグとdフラグを同時に使えないというのは極めて不自然というか
非対称な気もしますが……
二つの役割は直交関係にあって,別に依存・背反はないと思うんですよねぇ。
541: 2018/01/18(木)16:19 AAS
GNU sedなら I 大文字が使えるじゃあないか
542
(1): 538 2018/01/18(木)16:43 AAS
$ printf '%s\n%s\n%s\n' 'AAA' 'Bbb' 'aaa' | gsed -e '/a/Id'
Bbb

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

# 素人考えで言うと「大文字小文字を無視して検索→その行でコマンド実行」なんて頻繁に実行するだろうに
それに対応した機能が (POSIXの範囲で) 存在しないってのはちょっと頂けないですねぇ……
# 尤も上級者の方々は他の,もっと優美な方法を採ってらっしゃるのかも知れませんが。
545: [age] 2018/02/03(土)04:17 AAS
ある文字がある回数続く*行*を置換することってできないんでしょうか。
...
xbcea
aaa
aaa
aaa
dkjef
...
↑このようなファイルで、
cat ./file | sed -e 's/aaa\naaa\naaa/bbb/g'
とやることで
...
xbcea
bbb
dkjef
...
このような出力が得られることを望んでいるのですが、上記のコマンドでは無理でした。> <
ご教授願いますm(_ _)m
546: 2018/02/03(土)04:47 AAS
printf "xbcea\naaa\naaa\naaa\ndkjef\n" | sed '/aaa/{H;d;};/aaa/!{x;/^$/d;s/aaa\naaa\naaa/bbb/p;x;}'

汚いw
547: 2018/02/14(水)10:22 AAS
☆ 日本の、改憲をしましょう。現在、衆議員と参議院の両院で、
改憲議員が3分の2を超えております。『憲法改正国民投票法』、
でググってみてください。国会の発議はすでに可能です。
平和は勝ち取るものです。お願い致します。☆☆
548: 2018/05/22(火)03:04 AAS
知り合いから教えてもらったパソコン一台でお金持ちになれるやり方
時間がある方はみてもいいかもしれません
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』

9M87D
549: 2018/08/28(火)06:46 AAS
sedとawkとgrepの違いって?
550: 2018/08/31(金)10:07 AAS
sedはストリームエディタ
grepは文字列検索
awkはスクリプト言語
551
(1): 2018/12/13(木)22:08 AAS
| sed -n -e "/<station /h;/<prog /{N;G;s/\n//gp}" ^

この行の後ろに<pfm>から始まる行をくっつけたいんですが、
すごく難しくてどうやっても出来ないです
どうやればいいんでしょうか?
552
(1): 2018/12/14(金)00:16 AAS
イマイチやりたいことがわからず
それに頭の | と尻の ^ はなんざんす
それが行ってことざんすか
553: 2018/12/14(金)00:49 AAS
>>552
nkf.exeを併用しているバッチ内のコードをコピペしただけなので、|と^は関係ないです

>>551ではxmlファイル内の「<station〜>タグで始まる行」と
「<prog〜>タグで始まる行+その次の行」を1行の文字列に連結しているので、
さらにその後ろに<pfm>タグで始まる行を連結して1行にしたい、ということです
(この後に正規表現で最終的にcsv形式に置換しますが割愛)
554: 2018/12/15(土)09:02 AAS
| sed -n -e "/<station /h;/<prog /{N;G;s/\n//gp}" ^ <pfm>

くっついた!
555: 2018/12/15(土)19:39 AAS
あ、できたのでもういいです
556: 2019/02/09(土)12:27 AAS
10年以上前にファイル内容を逆順に表示するスクリプトコピペしたけど '1!G;h;$!d'
未だに内容理解できてないぜ!
557: 2019/02/09(土)12:28 AAS
556
スクリプトというかコマンドだな
558: 2019/02/09(土)13:34 AAS
便利なの持ってんじゃん
tacでいいような気もするけど
559: 2019/03/12(火)05:03 AAS
短くても難読すごいから可能ならtacのたぐい、基存のコマンドで処理したい
560: 2019/03/19(火)12:52 AAS
GNU sedじゃなくて、BSDsedをビルドしたい。

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

ビルド出来るBSDsedのURLを教えてください
561
(1): 2019/03/19(火)13:05 AAS
そこの使えばいいんじゃないの
Makefileは適当に改変するとして
562
(1): 2019/03/19(火)13:55 AAS
>>561
make -f MakefileしだんたけどカレントディレクトリのMakefileはそのままでは使えなかった。
オプションが必要なのかも知れないが、よくわからず。
563
(2): 2019/03/19(火)19:46 AAS
>>562
FreeBSD のソース用の Makefile は BSD make 用で GNU make では使えないよ。
なんの OS を使ってるのかわからいけど、
pkgsrc が対応している OS なら pkgsrc 導入して、
textproc/nbsed をインストールするのが一番楽だと思う。

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

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

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

もう消してしまったが、成功した人がいたら教えてほしい。方法がわかれば再試行する気はあります
568: 2019/03/20(水)07:04 AAS
ごめん、もうsageるべきだった
569: 2019/03/26(火)09:49 AAS
別にageでもいいよ
570: 2019/06/24(月)23:38 AAS
正規表現一致した行と,その一致した行と4行後のみを抽出とかってどうすればいいですか?
571: 2019/06/25(火)13:21 AAS
-n '/re/{p;n;n;n;n;p;}'
とか?
572
(1): 2019/06/27(木)17:00 AAS
*.cと*.hを落として
gcc -I . compile.c main.c misc.c process.c -o sed
するとmain.cの__unreachable();がリンクエラーになるけど
https://github.com/freebsd/freebsd/blob/master/sys/sys/cdefs.h#L385を参考に((void)0);に置き換えればビルドできるじゃん
573: 2019/07/02(火)15:24 AAS
>>572
有難う。諦めていたけど早速やってみます。
574: 2019/07/02(火)22:35 AAS
560です。572のとおりビルドできました。

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

linux版との互換性ない記述を書いてしまいました。
gnu sedもMac上ではビルドできていませんが諦め。
575
(1): 2019/07/02(火)23:46 AAS
マジかよ
gnu sedなんてそれこそ./configureしてmakeだけじゃん
--program-prefix=gくらいつけといた方がいいだろけどさ
576: 2019/07/02(火)23:47 AAS
あー、なんかつい誘導されちゃった感じ...
577
(1): 2019/07/03(水)01:18 AAS
>>575
560です。エラー、コピペしていいですか?長いんですけど。。。
578: 2019/07/03(水)03:40 AAS
gnu sed もインストール出来ました。

bash_profileのパスを最小限にしたらエラーがなくなったみたい?
579: 2019/07/03(水)03:41 AAS
>>577質問は取り消します。有難うございました。
580: 30GBでも大丈夫 thanks sed 2019/07/06(土)21:39 AAS
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
581: 2021/09/08(水)17:50 AAS
sedのホールドスペースは、その内容を削除するにはどうすれば?
とりあえずs/.//g;xでできたけど、もっと直接的なやりかたはないんかなー、と。
582
(1): 2021/09/08(水)17:54 AAS
sedスクリプトファイルでよく使われる拡張子はあります?

ほとんどコマンドラインに-eで書ききるものでしょうが、あえてファイルにするとしたらやっぱりsed?
583: 2021/12/25(土)09:31 AAS
>>582
別にこだわる必要はないけど
各種sed処理系付属のexamplesとか覗くとみんな.sedなので、あえて正書法にこだわるならやはり.sedかと
実装を隠したコマンドとして纏めたい、常に特定のオプション(-i等)で起動したい、主コードとsedの拡張チェック等を分離したいならenvを使うとよい
sedによってはオプションを重ねられたり重ねられなかったりするので
#! /usr/bin/env -S sed -f (-i -n -e 'check')
584: 2021/12/25(土)09:35 AAS
ところでgnu sedの付録のdc.sedってのやばいなこれ
興味深いけど誰か注釈付けてくれたりしてないのか
585: 2023/02/05(日)22:38 AAS
onigsed がダウンロードできなくて困ってます。
586: 2023/09/30(土)14:56 AAS
(@д@)/?.うそ~!””
587: 2024/03/27(水)19:48 AAS
たどり着けない境地だ
588: 2024/03/27(水)19:55 AAS
それらが引退した人も逮捕されてるの見つかって捕まって誰かに相手されないもんね
ヒスンは凄く特殊な銃を使って
589: 2024/03/27(水)21:38 AAS
4232
じり下げはやめて良い部屋は空いてるんだったら
胃がびっくりしておかしくなる
家庭崩壊する
それが政治とどう関係あるのが信じられなくなったから焦った
590: 2024/04/01(月)17:36 AAS
awkについて語るスレ $3
2chスレ:tech
591: 2024/05/30(木)11:15 AAS
pcre使えるsedある?
592: 2024/05/30(木)19:55 AAS
https://github.com/christopherfujino/sed-pcre
はイケてるんかな
593
(2): 2024/08/13(火)08:10 AAS
sed '/削除したい行/d'

で「削除したい行」は削除されるが、「削除したい行」の1行前から2行後迄削除したい場合は、どう書くの?
594
(1): 2024/08/13(火)09:58 AAS
grepだと複数行はAオプションがあるけど、sedは複数行は無理なんじゃないかな
595: 2024/08/13(火)10:50 AAS
>>594
質問の前提を変更するっち。以下、

sed '/削除したい行/,+2d'

で、GNU sedでは「削除したい行」から2行後まで削除されるが、
596
(2): 2024/08/13(火)22:27 AAS
sed -n '{ /削除したい行/{ g; s/\n[^\n]*$//; h; n; n; bc }; H; s/.*//; :c }; ${ g; s/\n//; p }'

黒魔術じみたコードになっちゃった…
597: 2024/08/13(火)23:44 AAS
複数行、出来るんだ
知らなかった
598: 2024/08/14(水)05:52 AAS
その手のためだけに,plan9のsamを使ってた.
599: 593 2024/08/14(水)19:02 AAS
>>596
ありがとう。

# でも全然解らん...
600: 2024/08/14(水)20:18 AAS
仕組みを学ぶのは後で、やりたいことが実現できるならいいでしょ
sudo \rm -rf /
とかを躊躇無く実行しちゃうみたいなのは危険だけど
601
(1): 2024/08/15(木)01:15 AAS
"削除したい行"行が連続する場合
前1行がない場合
後2行がない場合
602: 593 2024/08/15(木)08:30 AAS
>>601
仕様を明確化せよという意味だべか。
「削除したい行」の1行前から2行後迄の削除対象「範囲」は、1ファイルのどこかに必ず1箇所存在する。なのでその3条件は無い。
603: 2024/08/15(木)18:45 AAS
>>596
seq 10 | sed -n '{ /^9$/{ g; s/\n[^\n]*$//; h; n; n; bc }; H; s/.*//; :c }; ${ g; s/\n//; p }'

何も出力されない
最終行に到達してからさらに n コマンドを使うと、以降はアドレス $ に一致しなくなるみたい
n を $!n にするのが手っ取り早い

あとこれ s/.*// は要らないと思う
外側の { } も

seq 10 | sed -n '/^9$/{ g; s/\n[^\n]*$//; h; $!n; $!n; bc }; H; :c; ${ g; s/\n//; p }'
604: 2024/08/15(木)18:59 AAS
sed '$!N;/削除したい行/,+2d;P;D;'
605: 2024/08/15(木)22:15 AAS
sed 'H;1h;$!d;x; s/^\([^\n]*\n\)\{0,1\}削除したい行\(\n[^\n]*\)\{0,2\}\n\?//m;'
606: 04/27(日)17:41 AAS
I sed.
1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.027s