sed

1名無しさん@お腹いっぱい。
垢版 |
NGNG
sedスレッド
05/01/28 17:44:42
>>45
どうやって、perl おぼえた?
05/01/28 18:02:57
なんでperl使うの?
05/01/28 18:10:23
らくだ本に一万円投資しちゃったからとか。
05/01/28 18:15:54
どうやって perl インストールしたの?
05/01/30 00:56:27
インストールできなかったの?
51名無しさん@お腹いっぱい。
垢版 |
2005/03/24(木) 05:43:55
FreeBSD の sed って c コマンドの後のコマンドも実行するね。
これってバグじゃね?
2005/03/24(木) 09:44:49
>>51
意味不明.
2005/03/26(土) 16:20:20
perlは、難しいので
sed & awkでやって逝く事にしました。
2005/03/26(土) 17:23:11
適材適所ってこともあるんだよもん。
2005/03/29(火) 16:37:56

若者は、PERLを消化して部位部位いわせsed&AWK何それ?状態
案外、sed&AWKを学ぶ必要がなかったりする?

新しいのについて行けずに、たちどまってしまったオッサンは、sed&AWK
せめてPERLぐらいやる。だだでえくいっぱぐれてるのに

両方の言語を使用したことのあるエキスパートに意見を伺いたい
sed&AWKなら簡単にできてPERLなら難しい処理例
PERLなら簡単にできてsed&AWKなら難しい処理例
若者、おっさんに向けての指針等など
2005/03/29(火) 21:20:02
sed 's/hoge/hage/'
のほうが
perl -pe 's/hoge/hage/'
より短い。
2005/03/29(火) 22:01:24
ぐれてないでまず日本語を学ぶ >だだでえくいっぱ
2005/03/30(水) 12:32:32
大岡山のキティに英語の勉強しろといわれたので、伊藤和夫先生のテキストで勉強しました

-xx-xx-xxなperlは、使用しない故スティーブンス先生にも意見を聞きたいので
>>59
召還ヨロシク
2005/03/30(水) 14:06:53
>>58は浪人生
2005/04/21(木) 22:37:43
sed 's/い/お/g' file
で、
file内の「いっぱい」が「おっぱい」に置換されるのは、

正 常 !
2005/04/21(木) 23:05:31
s/い/お/g ←「g」付きだと置換結果は「おっぱお」じゃないの?
2005/05/09(月) 16:07:16
質問です。bashにてGnu sed ver4.0.9を用いて
echo hoge,uge,hage,age,sage | sed 's/uge,.*\?,//g'
を実行しました。
hoge,age,sage
が出力されることを期待したのですが、実際の出力は
hoge,sage
でした。

*や+の後に?を指定すると、例えばperl,pythonなんかでは
*や+は non greedy となるので、
sedでもそうなるものと考えてたのですが、何か間違っていたのでしょうか。
また、*や+を non greedy とするにはどうすれば良いのでしょうか。

よろしくお願いします。
2005/05/09(月) 16:38:04
>>62
man sed しました?
man sed の SEE ALSO 見ると、
GNU sed が regex(7) (POSIX 1003.2) に (大体) 準拠してるとあると思いますが、
POSIX 1003.2 に non greedy な量指定子は無いです。

何か他の方法をとる必要があるかと。
2005/05/09(月) 17:17:44
ありがとうございます、とりあえず>62に関しては
's/uge,[^,]*,//'
とすることにします。
65名無しさん@お腹いっぱい。
垢版 |
2005/05/10(火) 18:46:02
abc xyzをaxbyczにしたいのですが
2005/05/10(火) 19:18:22
>>58
> 大岡山のキティに英語の勉強しろといわれたので、伊藤和夫先生のテキストで勉強しました

だれ?
2005/05/10(火) 20:56:07
sed 's/abc xyz/axbycz/'
2005/05/18(水) 10:04:29
>>65
echo abc xyz |sed -e "s/^/%/; :ll; s/[%]\(.\)\(.*\) \(.\)\(.*\)/\1\3%\2 \4/; tll; s/%//;"
2005/05/18(水) 17:29:04
>>66

>だれ? は、

>大岡山のキティ
>伊藤和夫

の以上2つのうち誰の素性を知りたいのだね?
2005/05/18(水) 19:10:25
68は「大岡山のキティ」本人で複数の人間に「英語の勉強しろ」と言っていた、
という可能性は無いの。
2005/05/20(金) 15:37:59
>>70
「大岡山のキティ」に心当たりがあるなら>>66 のためにも、sedのsコマンドで「大岡山のキティ」を痴漢するってのは如何

2005/05/27(金) 13:57:14
GNU sedのVersion 4で、マルチバイトパッチをあてたVsersion 3みたく文字コー
ドを決めうちして変換する(ctype=EUCみたいに)方法はないのでしょうか。
jiskan16.bdfに外字を足してテキスト処理をやっているのですが、行頭に外字の
コードがくると、Version 4.1.4では誤認識してしまうのをなんとかしたいのです
が。
2005/05/27(金) 18:46:29
grepもUTF-8使えるようになって欲すい。
2005/05/27(金) 19:03:08
FreeBSDでutf-8なロケールでgrep使えばOK。

2005/05/28(土) 20:35:52
sedで四則演算系は作れますか? 理由も教えてください。
2005/05/28(土) 22:09:07
宿題は自分で。
2005/05/29(日) 00:01:58
>>72

bashを使っているとして、LANG=ja_jp.eucJP sed -e "s/hogehoge/fugaguga/"
みたいなのじゃダメなの?
2005/05/29(日) 07:50:40
>>76
分からないのならレスすんな。
2005/05/29(日) 08:47:11
煽っても無駄ですよ。宿題は自分で。
2005/05/29(日) 08:48:54
75に答えているので78はレスしないでください。
2005/05/29(日) 13:38:42
>>77

情報小出しですみません。LNAGは設定してます。
ググってもsedの古いソースがみつからなかったので、とりあえずは、Vine2.6
の3.0.2 (だかなんだかの)のバイナリを入れて動かしてますんで、当面は困っ
てはいないのですが、システムのバージョン上げるときに、個別対応する項目
が増えるのは面倒だなと思って質問した次第です。
2005/05/30(月) 01:02:38
>>81

GNU sedは4.xでマルチバイト文字対応が別の形で入ってるからね。
3.Xのローカライズパッチではそれほど厳密には検査されなかった
文字範囲が厳しくなってる可能性がある。

内部的には wide character に変換してごにょごにょしてるんだけど、
外字だとここでひっかかるのかもね。最悪自分でソースに手を入れて
wrapper関数書くしかないかも(外字をPUAにわりあてちゃうとか)。
83名無しさん@お腹いっぱい。
垢版 |
2005/05/31(火) 23:18:23
>>81

> ググってもsedの古いソースがみつからなかったので、

Ring server にあらかたのバージョンあったよ。
もちろん日本語対応パッチはそこにはないんだけど
(これはほかを探せばある)。
84名無しさん@お腹いっぱい。
垢版 |
2005/06/10(金) 22:45:51
http://pc8.2ch.net/test/read.cgi/unix/1113664637/298
Nで次の行もパターンスペースに読み込んでいた場合に、
d と D の違いが出る。
2005/06/10(金) 22:56:05
>>84
ありがとう
2005/06/10(金) 23:23:16
>>84,85
Nに加えて、sなどで意図的にパターンスペースに改行を入れることもあるよ。
Nを行の先読みに例えれば、後者は行の差込み挿入のような意図で行うんだけど。
その場合にもdとDの違いが出る。
87名無しさん@お腹いっぱい。
垢版 |
2005/07/15(金) 08:19:58
半角かなをsedで一括置換しようと
下のようなスクリプトを試しましたが
うまくいきません
解決策を教えてください

s/タ/\\={a}/g
s/ツ/\\={\\i}/g
s/ト/\\={u}/g
s/ニ/\\uc{r}/g
s/ヌ/\\uc{\\={r}}/g
s/ハ/\\uc{l}/g
s/゙/\\d{h}/g
s/ワ/\\d{m}/g
s/フ/\\.{n}/g
s/ホ/\\~n/g

OSはwindowsXPですが
sedはunix由来だからここで伺ってます
すみません
2005/07/15(金) 11:53:16
>>87
nkf じゃだめなん?
2005/07/15(金) 12:15:30
>>87
UNIX上のsedなら、それでちゃんと動作するよ。
9087
垢版 |
2005/07/15(金) 13:03:54
>>88
すみません、nkfで上記の置換を行う方法がわかりません
よければ教えてください

>>89
可能であれば、windowsで動作した方がいろいろと好都合
ですので...
2005/07/15(金) 13:21:49
>>90
UNIX上のsedでは動作

sedの文法はそれで間違ってない

Win版のsedのバグまたは仕様

UNIX板でこれ以上聞いても無駄
9287
垢版 |
2005/07/15(金) 13:23:40
88、89さん申し訳ありません
wiodows上でのsedでも87のsed置換は可能です
私の勘違いでした

改めて質問させていただきます

設定済みmeadowを使って
リージョンを設定して
M+shift+|で87のsedスクリプトを走らせた場合
\になってほしい部分が化けてしまいます

原因や対処方法がおわかりに方がいらっしゃったら
ご教示願えませんでしょうか?
2005/07/15(金) 13:28:00
set-process-coding-system
9487
垢版 |
2005/07/15(金) 13:52:19
>>93
ヒントありがとうございます

上述したように
リージョンにコマンドを渡す方法を使う場合

set-process-coding-systemの記述は

どこに、こんな風に記述すればよろしいのでしょうか?

頭が悪いので設定方法がわかりません
よろしければ教えてください
2005/07/15(金) 14:31:39
>>94
ずっと効くから.emacs に書いとけ。
96名無しさん@お腹いっぱい。
垢版 |
2005/07/17(日) 00:37:09
>>92
半角かなばっかりの文書を置換するのはできるみたいですが
漢字が混じってたら漢字は化けます
対処方法がありますか?
2005/07/17(日) 04:56:30
>>96
> 対処方法がありますか?

おまえ朝鮮人のにおいがぷんぷんするんだが。
やっぱり朝鮮人だったか。おねがいだから、国に帰ってくれ。
2005/08/02(火) 11:01:13
sed /^$/q

が「最初の空行までを出力する」ということで、メールのファイルからヘッダ部分を
抜き出すのに使えることがわかったのですが、その逆「最初の空行から後を出力
する」のはどうするのがよいでしょうか?

「sed ではなく○○を使え」とかいうことになるのかもしれませんが……
2005/08/02(火) 11:42:31
sed '1,/^$/d'
10098
垢版 |
2005/08/03(水) 00:43:23
>99
なるほど。「最初から空行までを削除する」と読むわけですか。

98の「空行が見つかったら終了する」も奥が深いと思ったのですが、まだまだ精進が
足りませんね。ありがとうございました。
101名無しさん@お腹いっぱい。
垢版 |
2005/08/30(火) 15:38:56
age
2005/08/31(水) 16:15:27
1行野郎どっさり
http://www.student.northpark.edu/pemente/sed/sed1line52.txt
103名無しさん@お腹いっぱい。
垢版 |
2005/10/12(水) 15:14:18
$ cat hoge.txt
A\textrm{1}\textrm{23}\textit{456}B
A\textrm{1}\textit{23}\textrm{456}B
のようなファイルがあるとして
\textrm{}を取り除いて
A123\textit{456}B
A1\textit{23}456B
を取り出したいと思い
$ < hoge.txt sed 's/\\textrm{\(.*\)}/\1/g'
と書きましたが,括弧の対応を外側から取るようで
A1}\textrm{23}\textit{456B
A1}\textit{23}\textrm{456B
と出力されてしまいます.
うまい方法はありませんか?
2005/10/12(水) 15:44:31
{\(.*\)}の部分が最長マッチしちゃんだから、ここのマッチが}で切れるよう
{\([^}]*\)}に変えればいい。
105103
垢版 |
2005/10/12(水) 15:47:46
>>104
なるほど!
どうもありがとうございます.
106名無しさん@お腹いっぱい。
垢版 |
2005/11/24(木) 20:57:48
コマンドラインオプションの -n がよく理解できないんですが、どういう場面で使えばいいんでしょうか
2005/11/24(木) 21:06:03
matchしたところだけくださいってな場面
2005/11/24(木) 21:44:39
sedを「セド」と呼ぶぽ
2005/11/25(金) 01:55:29
設定ファイルのコメントを除くときとか
2006/01/06(金) 04:53:17
sedってホールドスペースは1個しか使えないの?
2006/01/06(金) 06:52:12
>>110
yes
2006/01/06(金) 08:45:14
>>111
否定疑問文だから、英語で答えるなら
"No" が正解だろ。
2006/01/06(金) 10:24:18
>>110
はい。
2006/01/06(金) 10:37:46
>>111-113
Thank you all.
知恵と勇気と愛でなんとかしてみる
2006/01/06(金) 18:30:00
否定疑問文に
「んなことない」みたいな答え方はどうしたらいい?
2006/01/06(金) 18:35:30
>>115
■スレッド立てるまでもない質問スレッド Part112◆
http://academy4.2ch.net/test/read.cgi/english/1136133816/
2006/01/06(金) 18:42:23
112は最近英語を知った厨房にすぎない
2006/01/06(金) 19:12:12
>>115
Yes. と答えればいいだけ。
2006/01/06(金) 19:39:41
>>115
「んなことない」= "There is no such Japanese zither."
120名無しさん@お腹いっぱい。
垢版 |
2006/02/08(水) 18:38:37
@
2006/02/08(水) 19:42:26
ウナコーワ足んない
122名無しさん@お腹いっぱい。
垢版 |
2006/04/12(水) 02:41:13
深夜上げ
123名無しさん@お腹いっぱい。
垢版 |
2006/08/22(火) 16:18:15
ウムムム
2006/11/03(金) 09:37:20
同じ文字が3文字連続していたら表示したいのだが
2006/11/04(土) 02:04:43
>>124
http://pc8.2ch.net/test/read.cgi/unix/1039165754/600
2006/11/14(火) 20:28:59
grep, sed, awk
http://www.shuwasystem.co.jp/books/wwwsrch/cgi-bin/content/794/index.htm
この本ってどうですか?
単なるマニュアル以上の情報は載ってる?
2006/11/14(火) 20:59:20
このシリーズはなんとなく印象が悪いので手にとってないな。そういえば。
128名無しさん@お腹いっぱい。
垢版 |
2006/11/18(土) 10:13:03
教えてください。
awk,sed,シェルを使い、カンマ区切りのファイルの1カラム目と2カラム目をキーに、
あるファイルに含まれる行を削除するにはどうすればよいのでしょうか?

例)
--aaa.csv--
111,222,333,444
555,666,777,888
999,000,111,222

--file1.txt--
111222
555666

の場合、aaa.csvより下記行のみほしい。
999,000,111,222

ご存知でしたら、ご教授ください。
よろしくお願いします。
2006/11/18(土) 11:48:03
>>128
sed 's/\(...\)\(...\)/^\1,\2/' file1.txt | egrep -f- -v aaa.csv
2006/11/18(土) 12:30:05
>>129
突っ込みだけでスマン。それだと、
111,222999999999,333,444
なんていうのがaaa.csvにあると、これも削除されるぞ。

数字の桁数が自由か固定かあいまいな>>128がいけないんだが、
sedの置換先は /^\1,\2,/ みたいなんの方が安全と思う。

131名無しさん@お腹いっぱい。
垢版 |
2006/11/18(土) 20:48:36
>>129-130さんありがとうございました。
大変、参考になります。
私の説明がいけなかったのですが、
aaa.csvの1カラム目と2カラム目は固定ではなく、自由です。
ですので、
--aaa.csv--
11111,2222,333,444
55,666666,777,888
のような場合もあるのです。

また、file1.txtのほうも固定ではなく、
--file1.txt--
1111111222
555666
2233333
とスペースが入っている場合すらあります。

度々で恐縮ですが、
ご存知でしたら、ご教授ください。
よろしくお願いします。

2006/11/18(土) 23:16:33
>>131
仕事で必要ならコンサルタントを雇いなさい。
2006/11/19(日) 01:09:53
perl かなんかで書いちゃった方が早いよ。
2006/11/19(日) 07:09:03
sed,awk=perlかなんか
2006/11/28(火) 22:11:41
職場のマシン、perlが入ってなかった・・・ orz
2006/11/28(火) 22:52:45
この場合は、sedよりawkなんかな?
awkで書いてスピードアップのためのawkccしてしまうとか。
137名無しさん@お腹いっぱい。
垢版 |
2006/12/07(木) 00:21:57
ご存知でしたら、教えてください。
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
>>137
awk -f test.awk -v HENSU=${HENSU}
じゃね?
確認はできんが
139名無しさん@お腹いっぱい。
垢版 |
2007/02/04(日) 08:46:50
ある文字列を
現在時間+引数
に置換したいのですが、どのようにすればいいですか?

perlを使えば簡単なんだけど、職場のマシンでperl が入ってなかった(汗)

ちなみに、sed とawk は使えるみたいです。
2007/02/06(火) 00:47:03
>>139
引数によるけど、dateコマンドが使えてたら、OKでは。
$ date +%R
00:45
$ date --date '6 min ago' +%R
00:39
という感じで引数を与えるといけると思う
141名無しさん@お腹いっぱい。
垢版 |
2007/02/11(日) 21:34:20
入力ファイルを書き換えることはできる?

% sed 's/ABC/abc/' input.txt > output.txt
よくある上のようなプログラム(と呼ぶのかな?)で、
出力をoutput.txt
じゃなくてinput.txt のファイル自身を書き換えたいんだけど、可能かな?

つまり、余計なファイルは出力させたくないんだよ。
2007/02/11(日) 21:46:12
>>141

a.in-place オプションが使えるバージョンのsedを使う
b.inplaceというコマンドをつかってみる
c. (rm hoge.dat; sed 's/aaa/bbb/' > hoge.dat) < hoge.dat

あるいは
http://pc10.2ch.net/test/read.cgi/unix/1157601611/708-727
あたりを参照
143141
垢版 |
2007/02/11(日) 21:57:51
>>142
情報サンクス
a. の方法を用いました
2007/02/11(日) 22:27:47
問題解決したようだけどこぴぺして編集

・-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 オプションは無い。 
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 オプションは無い)

2007/02/11(日) 23:12:50
>>144
まとめ乙
レスを投稿する

5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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