- 1 名前:名無しさん@お腹いっぱい。 [04/05/28 16:56.net]
- sedスレッド
- 133 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/11/19(日) 01:09:53 .net]
- perl かなんかで書いちゃった方が早いよ。
- 134 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/11/19(日) 07:09:03 .net]
- sed,awk=perlかなんか
- 135 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/11/28(火) 22:11:41 .net]
- 職場のマシン、perlが入ってなかった・・・ orz
- 136 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/11/28(火) 22:52:45 .net]
- この場合は、sedよりawkなんかな?
awkで書いてスピードアップのためのawkccしてしまうとか。
- 137 名前:名無しさん@お腹いっぱい。 [2006/12/07(木) 00:21:57 .net]
- ご存知でしたら、教えてください。
Solarisのawkで、変数に対しての比較に正規表現が使えないのですが、 よい方法をご存知の方がいましたら、教えて下さい。 nawkなら、上手くいくのですが、awkでは無理なのでしょうか? また、Linuxのawkなら、上手くいきました。 よろしくお願いします。 例)下記の場合、./test.shを実行すると、test.awkの正規表現を使用している部分[if ( $7 ~ HENSU )] でエラーになってしまいます。 --------------------test.shの中身-------------------- #!/bin/sh HENSU="3A" cat testdt.txt | \ awk -f test.awk HENSU=${HENSU} exit 0 ----------------------------------------------------- --------------------testdt.txtの中身-------------------- aaaaabbbbcccdddeeeeeffffffgg3Aggggghhhhhhhiiiii ----------------------------------------------------- --------------------test.awkの中身-------------------- BEGIN{ FS="\t" } { if ( $7 ~ HENSU ) { print $0 } } -----------------------------------------------------
- 138 名前:名無しさん@お腹いっぱい。 [2006/12/07(木) 20:54:41 .net]
- >>137
awk -f test.awk -v HENSU=${HENSU} じゃね? 確認はできんが
- 139 名前:名無しさん@お腹いっぱい。 [2007/02/04(日) 08:46:50 .net]
- ある文字列を
現在時間+引数 に置換したいのですが、どのようにすればいいですか? perlを使えば簡単なんだけど、職場のマシンでperl が入ってなかった(汗) ちなみに、sed とawk は使えるみたいです。
- 140 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/02/06(火) 00:47:03 .net]
- >>139
引数によるけど、dateコマンドが使えてたら、OKでは。 $ date +%R 00:45 $ date --date '6 min ago' +%R 00:39 という感じで引数を与えるといけると思う
- 141 名前:名無しさん@お腹いっぱい。 [2007/02/11(日) 21:34:20 .net]
- 入力ファイルを書き換えることはできる?
% sed 's/ABC/abc/' input.txt > output.txt よくある上のようなプログラム(と呼ぶのかな?)で、 出力をoutput.txt じゃなくてinput.txt のファイル自身を書き換えたいんだけど、可能かな? つまり、余計なファイルは出力させたくないんだよ。
- 142 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/02/11(日) 21:46:12 .net]
- >>141
a.in-place オプションが使えるバージョンのsedを使う b.inplaceというコマンドをつかってみる c. (rm hoge.dat; sed 's/aaa/bbb/' > hoge.dat) < hoge.dat あるいは pc10.2ch.net/test/read.cgi/unix/1157601611/708-727 あたりを参照
- 143 名前:141 [2007/02/11(日) 21:57:51 .net]
- >>142
情報サンクス a. の方法を用いました
- 144 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/02/11(日) 22:27:47 .net]
- 問題解決したようだけどこぴぺして編集
・-i オプションをつかう ・-i オプションがないsedをつかっているなら in-place editing 対応の sed の導入を検討する ・ed をつかう ・perl を使う ・一時ファイルを必要としないファイル命名法を検討する ・www.idaemons.org/projects/inplace/ を使う ・(rm hoge.dat; sed 's/aaa/bbb/' > hoge.dat) < hoge.dat FreeBSD の標準 sed に -i オプションが取り入れられたのは 4.7R でそれ以前には無い。 NetBSD の標準 sed には -i オプションは無い。 OpenBSDの(ry MacOSX の 標準 sed は FreeBSD 由来なので元になるバージョンに依存する。 MacOSX 10.3以降は FreeBSD 5.1R由来なので、 -iオプションはある。 以前のGNU sed には in-place editing 機能はない (Changelog によると 2001-09-25 ) (3.02には in place オプションは無い)
- 145 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/02/11(日) 23:12:50 .net]
- >>144
まとめ乙
- 146 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/02/26(月) 05:04:17 .net]
- あってもなくてもいい追加
HP-UX 11i Version 2: September 2004 docs.hp.com/ja/B2355-90851/sed.1.html AIX 5L Version 5.2 inetsd01.boulder.ibm.com/doc_link/en_US/a_doc_lib/cmds/aixcmds5/sed.htm SunOS 5.10 docs.sun.com/app/docs/doc/819-1210/6n3j74jsr?q=sed&a=view いづれも 標準 sed に -i オプションは無い
- 147 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/02/27(火) 15:18:51 .net]
- irix
techpubs.sgi.com/library/tpl/cgi-bin/getdoc.cgi?coll=0650&db=man&fname=/usr/share/catman/u_man/cat1/sed.z&srch=sed
- 148 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/04/16(月) 23:15:15 .net]
- 仕事で root してる人に質問です。
皆さんどれぐらい仕事で sed スクリプト書いてます? スクリプトの後々のメンテナンスと、既に周囲に読める人があまり 居ないこととを考えると、s での置換以外では perl を使うか、そ うなったらもう全部 perl にした方がいいのかなと最近思ったりし ます。 6行の sed スクリプトを書いたのですが、コメントが 8 行になっ てしまって。。。
- 149 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/04/17(火) 00:51:04 .net]
- sedで複数行書くのは犯罪だ。awkで書こう
- 150 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/04/17(火) 00:55:39 .net]
- そんなん読めないやつに管理まかせちゃいかんよ。
- 151 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/04/18(水) 23:42:12 .net]
- >>148
すぐに読めなくても、それがsedのスクリプトであることを書いておけば、 perlを使えるひとならちょっとの手間で読めるようになるでしょ。 そうでなければ>>150ということに。 それから、6行のスクリプトのコメントが8行になっても、それはそれでいいじゃないか。
- 152 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/04/19(木) 01:05:48 .net]
- sedの複数行は本当に頭痛がしてくる。
perでlさえ可読性悪いと言われてるのにその比じゃない。 個人的趣味以外で書いてはいけない
- 153 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/04/21(土) 01:38:29 .net]
- sed のコードのそばに、
それを perl なり awk なりで書いたものを コメントとして残せば ・可読性→クリア ・コメント行数→クリア ・メンテ→工数倍w
- 154 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/04/21(土) 03:10:13 .net]
- s2pでいいじゃん、とかおもったりおもわなかったり
- 155 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/08(火) 00:15:31 .net]
- sedで千行あるファイルの
100行目から150行目を 抜き出すには どうしたらいいですか
- 156 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/08(火) 00:17:32 .net]
- sed -ne "100,150p"
- 157 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/08(火) 11:04:38 .net]
- sed -n 100,150p
- 158 名前:名無しさん@お腹いっぱい。 [2007/06/04(月) 20:43:16 .net]
- 単語の置換をしたいんだけど、どうしたらよいでしょうか
具体的な例で言うと、あるソース中の int を char に全置換したい んだけど 単純に sed "s/int/char/g" だと printf まで変わって しまうから それは避けたい。 「単語」の条件は 英数字+アンダースコア (\w+) であること。 これ絶対FAQだと思うんだけど、 「sed 単語 置換」 で検索しても 答にたどり着かなかったのですよ。 困った。
- 159 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/04(月) 21:26:42 .net]
- perl -pe 's/\bint\b/char/'
- 160 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/04(月) 21:37:31 .net]
- >>159 アフォか
正解: sed 's/\<int\>/char/g'
- 161 名前:158 mailto:sage [2007/06/04(月) 22:15:45 .net]
- >>159
ありがとうございました! うまくいけました。
- 162 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/04(月) 22:20:07 .net]
- \< \>で思い出したけど、HP-UXのgrepではこれ使えんのだよな。
同じregexpライブラリを使っているなら、sedでも使えんな。
- 163 名前:159 mailto:sage [2007/06/04(月) 23:51:11 .net]
- スレタイ読まずに書き込んで感謝されちゃったよ
こういうのを いたたまれない気持ち っていうのかな
- 164 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/01(日) 11:49:33 .net]
- 1
2 3 4 というtemp.txtをsed N temp.txtとすると 1 2 3 4 になるのはわかるのですがsed n temp.txtにすると 2 3 4 にならないのはどうしてですか 夜も眠れません
- 165 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/03(火) 10:30:14 .net]
- sed -e N -e 's/^/X/' -e 's/$/x/'
sed -e n -e 's/^/X/' -e 's/$/x/'
- 166 名前:名無しさん@お腹いっぱい。 [2007/07/03(火) 18:48:39 .net]
- 下記のように、置換する文字に変数って使えないんでしょうか?
設定ファイル100個飛ばしてしまったorz forでループして、一気に変えたいんですが、$mlとそのまま置換されて しまいます。このままだと、全部手がきです(T.T) どなたかお助け下さい。 ml=hoge sed 's/$ml/foo/'
- 167 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/03(火) 18:51:10 .net]
- >>166
それはsedじゃなくて、シェルスクリプト側の話だね。 ' ' じゃなくて " " を使う。 sed "s/$ml/foo/"
- 168 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/03(火) 19:17:43 .net]
- そしてmlが"/"を含んでいて破滅する。
- 169 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/03(火) 19:30:17 .net]
- ↑
できました!(T.T) ありがとうございました。一時は徹夜を覚悟しました。 本当に助かりました。ありがとう!
- 170 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/09(月) 22:52:03 .net]
- >>168
まさにそれ。 やりたいのは、特定の文字列を 現在のディレクトリ位置に置換したいということなんですが、 シェルスクリプトで sed s/hoge/$PWD/g < file1.txt > file2.txt と書くと、エラーになってしまいます。 ($PWDが/を含んでいるから) だれかうまいやり方わかりませんか?
- 171 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/09(月) 22:54:37 .net]
- sed "s|hoge|$PWD|g" < file1.txt > file2.txt
- 172 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/09(月) 23:43:40 .net]
- >>171
はやっ!ありがとー! でもごめんなさい、実は明後日まで試せる環境がないので、 また試せたら報告に来ます。
- 173 名前:名無しさん@お腹いっぱい。 [2007/07/12(木) 20:37:34 .net]
- sedでラベルを1行スクリプトに組み込むのは無理ですか?
sed '/^$/!{N;};/^$/{s/\n //g;} Nが終わったあとにスクリプトの最初に戻したいのですが美味くいきません・・・
- 174 名前:名無しさん@お腹いっぱい。 [2007/07/12(木) 21:01:50 .net]
- 【参院選】民主党から、在日コリアンの期待背負った金氏(民団幹部)が立候補…在日参政権訴え
news22.2ch.net/test/read.cgi/newsplus/1184227903/l50
- 175 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/12(木) 21:55:25 .net]
- >>173
普通にできるけど。:label; hoge; b label みたいに。
- 176 名前:170 mailto:sage [2007/07/12(木) 23:18:53 .net]
- 報告おくれましたが、無事できました。
本当にどうもありがとう!
- 177 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/14(土) 03:55:18 .net]
- >>173
-e >>175 普通じゃない
- 178 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/14(土) 09:07:49 .net]
- >>177
>>173 の質問読み直せ。-e で連結する話とは違うぞ。 >>175 が正解。たぶん、>>173 はラベルの後のセミコロン忘れてできなかったんだろう。
- 179 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/14(土) 09:12:01 .net]
- 省略せずに結果を書くと、
sed ':label;/^$/!{N;};b label;/^$/{s/\n //g;}' ↑な。これで何をやりたいかは知らんが。
- 180 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/14(土) 13:40:28 .net]
- >>178
ラベルの後に続けて書けるのはGNU含む一部のsedのみ。 だから普通じゃない。 普通はラベルごとに切って -e で繋ぐ。 sed -e ':label' -e '/^$/!{N;};b label' -e '/^$/{s/\n //g;}'
- 181 名前:名無しさん@お腹いっぱい。 [2007/07/19(木) 11:31:07 .net]
- タブ文字(0x09)だけをカンマに置換する方法はありますか?
バージョンはGNU sed の 3.02です。
- 182 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/19(木) 11:46:36 .net]
- 普通に sed 's/\t/,/g'
- 183 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/19(木) 12:11:34 .net]
- >>182
3.02は\tを使えません
- 184 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/19(木) 12:14:25 .net]
- >>181
普通にタブ文字を入れる。
- 185 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/19(木) 12:16:24 .net]
- 普通に sed 's/ /,/g'
タブのところは、シェル上なら Ctrl-Vに続けて入力。 シングルクォート必須。 なお、上の sed をコピペしても、TABが表示上で変換されてるので動かないと思う。
- 186 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/19(木) 13:25:58 .net]
- >>184
T=`echo -ne "\t"` sed -e "s/$T/,/g" で出来ました。 ありがとうございました。
- 187 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/19(木) 13:31:46 .net]
- >>186
そんなことしなくても、普通に >>185 でできるわけだが、、 何をわざわざ大変なことしてるだよww
- 188 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/19(木) 13:35:52 .net]
- >>185 では動きませんでした。よく知りもせず、確認もせずに回答しないでください。
- 189 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/19(木) 13:41:02 .net]
- >>187
あとで自分のシェルプログラムを読むときに 見えないタブコードのままだと誤解をしそうだし Ctrl-Vという入力方式が使えない端末もあるので あえて大層に書きました。
- 190 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/20(金) 15:25:43 .net]
- 改行がCRLFをLFにするには、
sed -e 's/\r//' < target > out や sed -e 's/^M//' < target > out で出来るんだけど、逆にLFをCRLFにするにはどーしたら良いですか? sed -e 's/\r\n/\n/' sed -e 's/^M^J/\n/' sed -e 's/^M\^J/\n/' いずれもだめでした。 sedは GNU sed 4.1.5版 です。
- 191 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/20(金) 16:06:36 .net]
- >>190
普通に sed 's/$/\r/'
- 192 名前:190 mailto:sage [2007/07/20(金) 18:19:11 .net]
- 出来ました。
- 193 名前:名無しさん@お腹いっぱい。 [2007/07/21(土) 00:53:54 .net]
- おお、ちょうどいい!もれも似たようなことで
CR/LFを<BR>にしたかったw dクスでつ190-191
- 194 名前:名無しさん@お腹いっぱい。 mailto:sega [2007/08/08(水) 19:34:32 .net]
- 正規表現にマッチした文字列だけを出力したい というとき
たとえば文字列の前の方の数字だけ取り出すときは sed -n "s/^\s*\([0-9]*\).*$/\1/p" みたいに 正規表現にマッチした全体をマッチした部分で置換する ようにやってたのですが、いちいち置換するのは 格好悪いので 部分\1だけ出力するような格好いい書き方ありませんか?
- 195 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/09(木) 00:53:55 .net]
- perl -nle 'print $1 if /\b(\d+)/'
- 196 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/09(木) 03:14:20 .net]
- >>194
GNU grep の -o オプションを使う。 ほかの grep だったらごめんなさいw
- 197 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/09(木) 13:19:08 .net]
- sedスレのつもりだったんだけど、まあいいや。ありがとん。
- 198 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/16(木) 23:03:21 .net]
- あるテキストファイルの1行目〜最終行の1000行前までを
取り出したいのですが、どのようにすればよいでしょうか? (ちょうど tail -n 1000 tmp.txt で取り出せない部分を 簡単に得たいのですが)
- 199 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/16(木) 23:07:04 .net]
- awk '{a[NR]=$0}NR>20{print a[NR-1000]}'
- 200 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/16(木) 23:08:31 .net]
- まちがえた。
sedでやっても美しくならないから、awkで awk '{a[NR]=$0}NR>1000{print a[NR-1000]}'
- 201 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/17(金) 08:48:47 .net]
- sed -n '1h;1!H;1001,${g;P;s/[^\n]*\n//;h}'
- 202 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/17(金) 12:49:09 .net]
- sedでやらなきゃいかんの?
- 203 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/17(金) 13:44:34 .net]
- >>202
sedスレなので
- 204 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/17(金) 14:06:45 .net]
- なんでsedスレを選んだんだろ。
- 205 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/17(金) 15:15:15 .net]
- そこにsedがあるから
- 206 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/17(金) 21:24:35 .net]
- >>200
>>201 レスありがとうございました。大変助かりました。 今回はawkを使おうと思いますm(__)m >>202 すみません、sedを覚えたての初心者なもので・・・
- 207 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/21(火) 03:25:33 .net]
- sed -n ':b;1001,${P;N;D};N;bb'
詰め
- 208 名前:名無しさん@お腹いっぱい。 [2007/09/06(木) 11:55:22 .net]
- 下のような行があったとして
command, --いろいろなコメント command, だけ残して、--いろいろなコメント(--から後ろ)を全部削除 したいのですがどうすれば良いんでしょうか? 本を読んでもよくわかりません。どうかお助け下さい。
- 209 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/09/06(木) 12:02:37 .net]
- sed 's/--.*//'
- 210 名前:208 mailto:sage [2007/09/06(木) 12:05:26 .net]
- 消えました!
ありがとうございました!>>209 ほんと助かりましたです。
- 211 名前:名無しさん@お腹いっぱい。 [2007/09/06(木) 13:04:52 .net]
- 質問ばかりで恐縮なのですが、もうひとつ質問があります。
line...$ な行があったとして、^line を見つけた時に、下のようにおしりに HOGEな文字列を追加したい場合はどうすれば良いのでしょうか? line... HOGE$ ほんと、勉強不足で申しわけありません。オライリー本を片手にやってる のですが、どうしてもわかりません。
- 212 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/09/06(木) 13:12:43 .net]
- >>211
sed '/^line/s/\$$/ HOGE$/' address について調べれ。
- 213 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/09/06(木) 13:31:20 .net]
- >>211 の $ は文字じゃなくて、正規表現の $ の意味ではないのかと
- 214 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/09/06(木) 14:15:56 .net]
- >>212-213
ありがとうございました。 sed '/^line/s/$/ HOGE/' でうまくいきました。addressについても勉強してみます!
- 215 名前:名無しさん@お腹いっぱい。 [2007/10/07(日) 16:15:05 .net]
- 仮ファイルを使わずに
入力ファイル自身を書き換えることは出来ますか?
- 216 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/10/07(日) 16:58:58 .net]
- -i
- 217 名前:名無しさん@お腹いっぱい。 mailto:sega [2007/10/11(木) 01:21:12 .net]
- //exec($command,$arg);
とコメントアウトされた行をアンコメントしたいんだけど sed 's/\/\/(exec\(\$command,\$arg\);)/\\1/' -i hoge.php とかやっても思ったとおりに置換されない (とか$とか/とかをうまくエスケープできてないだけなのか どうなのかがよくわかんないんだけど、どこが間違ってる?
- 218 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/10/11(木) 01:30:55 .net]
- sed -e 's@//\(exec(\$command,\$arg);\)@\1@'
- 219 名前:名無しさん@お腹いっぱい。 [2007/11/11(日) 11:05:40 .net]
- 教えて下さい。
例 12345kkk6789 23456kkk4321 32456kkk9876 のようなテキストファイルが複数あり、 各行のkkk以降(kkkも含めて)を削除したいです。 1日考えてダメだったので、だれかお助け願います。
- 220 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/11/11(日) 11:11:26 .net]
- sed -e 's/kkk.*//'
- 221 名前:名無しさん@お腹いっぱい。 [2007/11/11(日) 13:48:54 .net]
- ありがとうございます。
- 222 名前:名無しさん@お腹いっぱい。 [2007/12/19(水) 03:19:13 .net]
- sed -e '500,$d' の500の部分を変数にすることって出来ますか?
例えば、sed -e '$no,$d' みたいな感じで実行するとエラーになって困ってます。
- 223 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/12/19(水) 03:39:03 .net]
- >>222
シングルクォートをダブルクォートに変えてみな。
- 224 名前:222 mailto:sage [2007/12/19(水) 03:55:03 .net]
- >>223
どうもです。 sed -e "$no,$d"という風に変更してみましたがダメでした… そもそも変数を指定することが出来ないというオチなのでしょうか?
- 225 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/12/19(水) 04:23:23 .net]
- >>224
あ、>>222 をちゃんと見てなかった。 $d は変数じゃなくて行末とデリートか。 なら、後ろの $ はエスケープが要るな。 sed -e "$no,\$d" > そもそも変数を指定することが出来ないというオチなのでしょうか? sed 自身が変数を解釈しているわけではない。 この場合は sed に引数を渡すシェルが処理をしている。 bash を例にとって説明すると >>222 の形式では シングルクォートの中身は展開されずに そのままの文字列が sed に渡される。 ダブルクォートにすると中身を展開するので $no と $d を変数と解釈して設定された値に 入れ替わったものが sed に渡される。 この辺の挙動をちゃんと知りたいのならおまいさんが 使っているシェルの man を読め。
- 226 名前:222 mailto:sage [2007/12/19(水) 04:41:38 .net]
- >>225
エスケープしたら一発で成功しました! 225さんの説明を読んで、また一つ理解が深まりました。 どうもありがとうございました!
- 227 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/12/19(水) 07:23:30 .net]
- >>215
>>144
- 228 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/12/19(水) 13:56:00 .net]
- sedの置換について質問 (GNU sed 4.x)
タブ(\t)は置換できるのですが改行(\n)が置換できません。 例えば # cat a.txt aaa bbb aaa(タブ)bbb 3行目の(タブ)区切りは置換できるけど1行目と2行目にマッチした文字を置換できません。 どうやったらできますか?
- 229 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/12/19(水) 14:48:42 .net]
- 何をどう置換したいのだ?
sed のスクリプトのほうも示してほしいのだが
- 230 名前:228 mailto:sage [2007/12/19(水) 18:53:01 .net]
- a.txtの内容
---------- aaa bbb aaa bbb ---------- このa.txtを ---------- eee fff aaa bbb ---------- ↑のように置換したい。 sed -i 's/aaa\nbbb/eee\nfff/' a.txt これで出来ると思ったのですが出来なかったので。 どうやったらできますか?
- 231 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/12/19(水) 19:02:25 .net]
- -e 's/^aaa$/eee/' -e 's/^bbb$/fff/'
- 232 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/12/19(水) 19:25:27 .net]
- >>231
アフォかw
- 233 名前:228 mailto:sage [2007/12/19(水) 19:47:13 .net]
- 訂正
a.txtの内容 ---------- aaa bbb ccc bbb ---------- このa.txtを ---------- aaa bbb ccc ddd ---------- ↑のように置換したい。 この文字は何行目にあるか不明だとして 一番下のbbbをdddに置換することはできますか?
|

|