sed ..
[2ch|▼Menu]
2:名無しさん@お腹いっぱい。
04/05/28 17:06
2

3:名無しさん@お腹いっぱい。
04/05/28 17:09
sed -e '1,2d' -e '4,$d'

4:名無しさん@お腹いっぱい。
04/05/28 17:12
sed -E -e '=' test | sed -E 'N;s/\n/: /' | sed -E 's/^([0-9]: )/0\1/'

これをパイプを使わずに表現したいんですけど、どうすれば出来ますか?

5:名無しさん@お腹いっぱい。
04/05/28 17:14
sedのスクリプトで?
sed -f hoge test
なかんじ?

6:4
04/05/28 17:18
>>5
はい。
#!/usr/bin/sed -f
{
=
N
s/\n/: /
s/^([0-9]: )/0\1/
}

としてもうまく行かなくて悩んでいます。

7:名無しさん@お腹いっぱい。
04/05/28 17:22
適材適所という言葉があるだろうに…

% awk '{printf "%02d: %s\n", NR, $0}' test

8:4
04/05/28 17:30
例えば
aaa\
bbb\
ccc
ddd\
eee

の\が出てくると次の行と連結するスクリプトは

#!/usr/bin/sed -f
:cont
/\\$/{
N
s/\\\n//
b cont
}
の様にすれば
aaabbbccc
dddeee
のようにうまく出力されるのに、

#!/usr/bin/sed -f
{
=
N
s/\n/: /
s/^([0-9]: )/0\1/
}

みたいに、先頭に2桁の行番号と:を追加するのはなぜうまく出来ないのか
疑問に思ったのです。

9:名無しさん@お腹いっぱい。
04/05/28 18:46
ム板のawkスレの住人だな?

10:名無しさん@お腹いっぱい。
04/05/28 19:29
スレリンク(linux板)

11:名無しさん@お腹いっぱい。
04/05/29 02:07
【貝】第1回シェル講座【殻】
スレリンク(unix板)
☆シェルスクリプトを勉強するにあたって☆
スレリンク(unix板)

ここらへんに合流すれば? そういう話題結構でてるよ
これだけではなんなので。日本語で読める sed に関する文献としては
「MS-DOS を 256倍使うための本 Vol.3」が No.1 です。おすすめ


12:名無しさん@お腹いっぱい。
04/07/03 15:06
古いけどそこそこ良くまとまったサイトを紹介してみよ。
URLリンク(www.gcd.org)

13:名無しさん@お腹いっぱい。
04/07/16 12:26
メールの中身で
添付ファイルのデータが開始するbase64という文字列があった後のデータ全部切り抜いて出力したいんですが
sedで可能でしょうか?


14:名無しさん@お腹いっぱい。
04/07/16 15:22
>>13
URLリンク(www.gcd.org)

15:名無しさん@お腹いっぱい。
04/07/17 10:31
From: hoge hage <hoge@moe.com>
↑ これの < > の中に入ってるメールアドレスを、抜き出したいんですが、どうすればいいでしょうか?


16:名無しさん@お腹いっぱい。
04/07/17 11:48
sed 's/.*From.*<\(.*\)>.*/\1/'
じゃダメ?

17:15
04/07/17 13:02
>16
ありがとうございます
後は加工して使おうと思います。


18:名無しさん@お腹いっぱい。
04/09/20 15:15:15
ど素人です。
sedでMIFESのグローバル置換みたいなことってできないですか?
あるディレクトリに存在する複数のファイルをワイルドカード指定で入力して
一括して置換してもとのファイルにリダイレクトしてやるみたいな。
下記のイメージで(下記はとおらないですけど・・)。
sed -e 's/aaa/zzz/g' < * > *
1日中ぐぐってぐぐってもがいたけどわかりませんでした。すごいひと教えてください。

19:名無しさん@お腹いっぱい。
04/09/20 15:32:00
すごくなくてもできる。とりあえず、シェルスクリプトすれに池。
もっと短くできるが、何をやっているかわかりやすく説明するのをかねて↓

find -type f | while read file ; do
mv ${file} ${file}.backup
cat ${file}.backup | sed -e "s/aaa/zzz/g" > ${file}
done


20:名無しさん@お腹いっぱい。
04/09/20 18:19:09
次世代sed登場
URLリンク(news.tbs.co.jp)

21:名無しさん@お腹いっぱい。
04/09/20 20:54:22
>>19
おわっ。あっさりできたっ。どうもありがとです!
シェルスクリプトすごい便利。勉強しなきゃですね・・。

22:名無しさん@お腹いっぱい。
04/09/22 03:09:12
bash上でなのですが、
hoge=`echo ../tmp/work.c | sed 's/\//\\\//g'`
を実行しようとすると、
sed: -e expression #1, char 9: Unknown option to 's'
となってしまうのは、なぜですか?

/を\/に置換したいだけなのです。

23:名無しさん@お腹いっぱい。
04/09/22 03:29:24
>>22
sed 関係ないやん
\ → \\

24:名無しさん@お腹いっぱい。
04/09/22 03:50:35
うーん、確かにシェル向けのネタなのかもですが、
echo ../tmp/work.c | sed 's/\//\\\//g'
だけだと動くのがよくわからなくって。


25:名無しさん@お腹いっぱい。
04/09/22 04:32:21
いいことを教えてあげよう。
's@hoge@hage@g'とやってごらん。

26:名無しさん@お腹いっぱい。
04/09/22 05:02:27
command not found
でした・・・って、そういう意味ではないのかな・・・。

27:名無しさん@お腹いっぱい。
04/09/22 10:45:33
s/..../..../g は s@....@....@g とも書ける

という意味

28:名無しさん
04/09/24 04:30:15
Filesystem            Size  Used Avail Use% Mounted on
/dev/hda5             9.6G  844M  8.3G  10% /

というのを
~$ df /home/ | sed -n -e "2s/.*\(\d*\)%.*/<\1>/p"
として10を取り出したいのですがうまくいきません
結果は
<>
となります
どうすればいいのでしょうか?

29:名無しさん@お腹いっぱい。
04/09/24 06:40:09
space, tab を区切りにして何番目の要素って選択したほうがいいんじゃないの。

30:名無しさん@お腹いっぱい。
04/09/24 06:43:14
先頭の.* が % の直前までマッチし、
\d* が長さ0、
% が % にマッチ、
最後の .* が残りの部分にマッチしてるからね。

31:名無しさん@お腹いっぱい。
04/09/24 12:56:25
そもそも \d なんて使える sed あんの?

32:名無しさん@お腹いっぱい。
04/10/10 16:22:51
sedsedesedesedesed

33:名無しさん@お腹いっぱい。
04/10/10 17:50:46
sed(sede){3}sed

34:名無しさん@お腹いっぱい。
04/11/09 16:03:38
hosyu

35:名無しさん@お腹いっぱい。
04/11/09 21:45:42
しーずか〜な〜しーずかな〜
さーとのーあ〜きぃ〜
おーsed〜にきぃ〜のみが〜
お〜ちる〜よ〜は〜

36:名無しさん@お腹いっぱい。
04/11/23 17:09:03
URLリンク(www.chimimo.com)

37:名無しさん@お腹いっぱい。
04/12/25 00:53:17
sedは日暮れて〜夕波小波〜

38:BBQ
05/01/27 15:19:10
temp.txt中の"-"と"+"以外の文字を空白に変換するには


sed 's/[^\-\+]/ /g' temp.txt


でうまくいきますが、temp.txt中の"-"と"+"と数字以外の文字を空白に変換するには

どう記述すればよいのでしょうか

sed 's/[^\-\+0-9]/ /g' temp.txt

では文法エラーになってしまいます。

39:BBQ
05/01/27 15:31:07
>>38

+と−の順番が逆でした。
以下に訂正。

temp.txt中の"-"と"+"以外の文字を空白に変換するには


sed 's/[^\+\-]/ /g' temp.txt


でうまくいきますが、temp.txt中の"-"と"+"と数字以外の文字を空白に変換するには

どう記述すればよいのでしょうか

sed 's/[^\+\-0-9]/ /g' temp.txt

では文法エラーになってしまいます。


40:名無しさん@お腹いっぱい。
05/01/27 15:31:45
うちの OS だと、ならんけど?
まあ
sed 's/[^-+0-9]/ /g' temp.txt
って書いた方が簡潔だとは思うが。

41:BBQ
05/01/27 15:55:36

>>40
> うちの OS だと、ならんけど?
> まあ
> sed 's/[^-+0-9]/ /g' temp.txt
> って書いた方が簡潔だとは思うが。


Cygwin についてくるsed です。

sed 's/[^-+0-9]/ /g' temp.txt

これは問題なく正常動作しました。



42:名無しさん@お腹いっぱい。
05/01/27 21:55:24
>>41
>
> >>40
> > うちの OS だと、ならんけど?
> > まあ
> > sed 's/[^-+0-9]/ /g' temp.txt
> > って書いた方が簡潔だとは思うが。
>
>
> Cygwin についてくるsed です。
>
> sed 's/[^-+0-9]/ /g' temp.txt
>
> これは問題なく正常動作しました。
>
>
sed 's/[^+-0-9]/ /g' temp.txt にするとだめです。
+と0の間にあるコードと解釈されるらしい。

43:名無しさん@お腹いっぱい。
05/01/27 22:13:09
>>42
> sed 's/[^+-0-9]/ /g' temp.txt にするとだめです。
仕様です.
URLリンク(www.jp.freebsd.org)


44:名無しさん@お腹いっぱい。
05/01/27 22:15:19
すまん url 化けてた.
URLリンク(www.jp.freebsd.org)


45:名無しさん@お腹いっぱい。
05/01/28 13:57:06
なんでperl使わないの?

46:名無しさん@お腹いっぱい。
05/01/28 17:44:42
>>45
どうやって、perl おぼえた?

47:名無しさん@お腹いっぱい。
05/01/28 18:02:57
なんでperl使うの?

48:名無しさん@お腹いっぱい。
05/01/28 18:10:23
らくだ本に一万円投資しちゃったからとか。

49:名無しさん@お腹いっぱい。
05/01/28 18:15:54
どうやって perl インストールしたの?

50:名無しさん@お腹いっぱい。
05/01/30 00:56:27
インストールできなかったの?

51:名無しさん@お腹いっぱい。
05/03/24 05:43:55
FreeBSD の sed って c コマンドの後のコマンドも実行するね。
これってバグじゃね?

52:名無しさん@お腹いっぱい。
05/03/24 09:44:49
>>51
意味不明.


53:名無しさん@お腹いっぱい。
05/03/26 16:20:20
perlは、難しいので
sed & awkでやって逝く事にしました。

54:名無しさん@お腹いっぱい。
05/03/26 17:23:11
適材適所ってこともあるんだよもん。

55:名無しさん@お腹いっぱい。
05/03/29 16:37:56

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

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

両方の言語を使用したことのあるエキスパートに意見を伺いたい
sed&AWKなら簡単にできてPERLなら難しい処理例
PERLなら簡単にできてsed&AWKなら難しい処理例
若者、おっさんに向けての指針等など

56:名無しさん@お腹いっぱい。
05/03/29 21:20:02
sed 's/hoge/hage/'
のほうが
perl -pe 's/hoge/hage/'
より短い。

57:名無しさん@お腹いっぱい。
05/03/29 22:01:24
ぐれてないでまず日本語を学ぶ >だだでえくいっぱ

58:名無しさん@お腹いっぱい。
05/03/30 12:32:32
大岡山のキティに英語の勉強しろといわれたので、伊藤和夫先生のテキストで勉強しました

-xx-xx-xxなperlは、使用しない故スティーブンス先生にも意見を聞きたいので
>>59
召還ヨロシク

59:名無しさん@お腹いっぱい。
05/03/30 14:06:53
>>58は浪人生

60:名無しさん@お腹おっぱい。
05/04/21 22:37:43
sed 's/い/お/g' file
で、
file内の「いっぱい」が「おっぱい」に置換されるのは、

正 常 !


61:名無しさん@お腹いっぱい。
05/04/21 23:05:31
s/い/お/g ←「g」付きだと置換結果は「おっぱお」じゃないの?

62:名無しさん@お腹いっぱい。
05/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 とするにはどうすれば良いのでしょうか。

よろしくお願いします。

63:名無しさん@お腹いっぱい。
05/05/09 16:38:04
>>62
man sed しました?
man sed の SEE ALSO 見ると、
GNU sed が regex(7) (POSIX 1003.2) に (大体) 準拠してるとあると思いますが、
POSIX 1003.2 に non greedy な量指定子は無いです。

何か他の方法をとる必要があるかと。

64:名無しさん@お腹いっぱい。
05/05/09 17:17:44
ありがとうございます、とりあえず>62に関しては
's/uge,[^,]*,//'
とすることにします。


65:名無しさん@お腹いっぱい。
05/05/10 18:46:02
abc xyzをaxbyczにしたいのですが

66:名無しさん@お腹いっぱい。
05/05/10 19:18:22
>>58
> 大岡山のキティに英語の勉強しろといわれたので、伊藤和夫先生のテキストで勉強しました

だれ?

67:名無しさん@お腹いっぱい。
05/05/10 20:56:07
sed 's/abc xyz/axbycz/'

68:名無しさん@お腹いっぱい。
05/05/18 10:04:29
>>65
echo abc xyz |sed -e "s/^/%/; :ll; s/[%]\(.\)\(.*\) \(.\)\(.*\)/\1\3%\2 \4/; tll; s/%//;"

69:名無しさん@お腹いっぱい。
05/05/18 17:29:04
>>66

>だれ? は、

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

の以上2つのうち誰の素性を知りたいのだね?

70:名無しさん@お腹いっぱい。
05/05/18 19:10:25
68は「大岡山のキティ」本人で複数の人間に「英語の勉強しろ」と言っていた、
という可能性は無いの。

71:名無しさん@お腹いっぱい。
05/05/20 15:37:59
>>70
「大岡山のキティ」に心当たりがあるなら>>66 のためにも、sedのsコマンドで「大岡山のキティ」を痴漢するってのは如何



72:名無しさん@お腹いっぱい。
05/05/27 13:57:14
GNU sedのVersion 4で、マルチバイトパッチをあてたVsersion 3みたく文字コー
ドを決めうちして変換する(ctype=EUCみたいに)方法はないのでしょうか。
jiskan16.bdfに外字を足してテキスト処理をやっているのですが、行頭に外字の
コードがくると、Version 4.1.4では誤認識してしまうのをなんとかしたいのです
が。

73:名無しさん@お腹いっぱい。
05/05/27 18:46:29
grepもUTF-8使えるようになって欲すい。

74:名無しさん@お腹いっぱい。
05/05/27 19:03:08
FreeBSDでutf-8なロケールでgrep使えばOK。



75:名無しさん@お腹いっぱい。
05/05/28 20:35:52
sedで四則演算系は作れますか? 理由も教えてください。

76:名無しさん@お腹いっぱい。
05/05/28 22:09:07
宿題は自分で。

77:名無しさん@お腹いっぱい。
05/05/29 00:01:58
>>72

bashを使っているとして、LANG=ja_jp.eucJP sed -e "s/hogehoge/fugaguga/"
みたいなのじゃダメなの?


78:名無しさん@お腹いっぱい。
05/05/29 07:50:40
>>76
分からないのならレスすんな。

79:名無しさん@お腹いっぱい。
05/05/29 08:47:11
煽っても無駄ですよ。宿題は自分で。

80:名無しさん@お腹いっぱい。
05/05/29 08:48:54
75に答えているので78はレスしないでください。

81:名無しさん@お腹いっぱい。
05/05/29 13:38:42
>>77

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


82:名無しさん@お腹いっぱい。
05/05/30 01:02:38
>>81

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

内部的には wide character に変換してごにょごにょしてるんだけど、
外字だとここでひっかかるのかもね。最悪自分でソースに手を入れて
wrapper関数書くしかないかも(外字をPUAにわりあてちゃうとか)。


83:名無しさん@お腹いっぱい。
05/05/31 23:18:23
>>81

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

Ring server にあらかたのバージョンあったよ。
もちろん日本語対応パッチはそこにはないんだけど
(これはほかを探せばある)。


84:名無しさん@お腹いっぱい。
05/06/10 22:45:51
スレリンク(unix板:298番)
Nで次の行もパターンスペースに読み込んでいた場合に、
d と D の違いが出る。

85:名無しさん@お腹いっぱい。
05/06/10 22:56:05
>>84
ありがとう

86:名無しさん@お腹いっぱい。
05/06/10 23:23:16
>>84,85
Nに加えて、sなどで意図的にパターンスペースに改行を入れることもあるよ。
Nを行の先読みに例えれば、後者は行の差込み挿入のような意図で行うんだけど。
その場合にもdとDの違いが出る。

87:名無しさん@お腹いっぱい。
05/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由来だからここで伺ってます
すみません

88:名無しさん@お腹いっぱい。
05/07/15 11:53:16
>>87
nkf じゃだめなん?

89:名無しさん@お腹いっぱい。
05/07/15 12:15:30
>>87
UNIX上のsedなら、それでちゃんと動作するよ。

90:87
05/07/15 13:03:54
>>88
すみません、nkfで上記の置換を行う方法がわかりません
よければ教えてください

>>89
可能であれば、windowsで動作した方がいろいろと好都合
ですので...

91:名無しさん@お腹いっぱい。
05/07/15 13:21:49
>>90
UNIX上のsedでは動作

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

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

UNIX板でこれ以上聞いても無駄

92:87
05/07/15 13:23:40
88、89さん申し訳ありません
wiodows上でのsedでも87のsed置換は可能です
私の勘違いでした

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

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

原因や対処方法がおわかりに方がいらっしゃったら
ご教示願えませんでしょうか?


93:名無しさん@お腹いっぱい。
05/07/15 13:28:00
set-process-coding-system

94:87
05/07/15 13:52:19
>>93
ヒントありがとうございます

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

set-process-coding-systemの記述は

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

頭が悪いので設定方法がわかりません
よろしければ教えてください

95:名無しさん@お腹いっぱい。
05/07/15 14:31:39
>>94
ずっと効くから.emacs に書いとけ。

96:名無しさん@お腹いっぱい。
05/07/17 00:37:09
>>92
半角かなばっかりの文書を置換するのはできるみたいですが
漢字が混じってたら漢字は化けます
対処方法がありますか?

97:名無しさん@お腹いっぱい。
05/07/17 04:56:30
>>96
> 対処方法がありますか?

おまえ朝鮮人のにおいがぷんぷんするんだが。
やっぱり朝鮮人だったか。おねがいだから、国に帰ってくれ。

98:名無しさん@お腹いっぱい。
05/08/02 11:01:13
sed /^$/q

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

「sed ではなく○○を使え」とかいうことになるのかもしれませんが……

99:名無しさん@お腹いっぱい。
05/08/02 11:42:31
sed '1,/^$/d'


100:98
05/08/03 00:43:23
>99
なるほど。「最初から空行までを削除する」と読むわけですか。

98の「空行が見つかったら終了する」も奥が深いと思ったのですが、まだまだ精進が
足りませんね。ありがとうございました。

101:名無しさん@お腹いっぱい。
05/08/30 15:38:56
age

102:名無しさん@お腹いっぱい。
05/08/31 16:15:27
1行野郎どっさり
URLリンク(www.student.northpark.edu)

103:名無しさん@お腹いっぱい。
05/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
と出力されてしまいます.
うまい方法はありませんか?


104:名無しさん@お腹いっぱい。
05/10/12 15:44:31
{\(.*\)}の部分が最長マッチしちゃんだから、ここのマッチが}で切れるよう
{\([^}]*\)}に変えればいい。

105:103
05/10/12 15:47:46
>>104
なるほど!
どうもありがとうございます.


106:名無しさん@お腹いっぱい。
05/11/24 20:57:48
コマンドラインオプションの -n がよく理解できないんですが、どういう場面で使えばいいんでしょうか

107:名無しさん@お腹いっぱい。
05/11/24 21:06:03
matchしたところだけくださいってな場面

108:名無しさん@お腹いっぱい。
05/11/24 21:44:39
sedを「セド」と呼ぶぽ

109:名無しさん@お腹いっぱい。
05/11/25 01:55:29
設定ファイルのコメントを除くときとか

110:名無しさん@お腹いっぱい。
06/01/06 04:53:17
sedってホールドスペースは1個しか使えないの?

111:名無しさん@お腹いっぱい。
06/01/06 06:52:12
>>110
yes

112:名無しさん@お腹いっぱい。
06/01/06 08:45:14
>>111
否定疑問文だから、英語で答えるなら
"No" が正解だろ。

113:名無しさん@お腹いっぱい。
06/01/06 10:24:18
>>110
はい。

114:名無しさん@お腹いっぱい。
06/01/06 10:37:46
>>111-113
Thank you all.
知恵と勇気と愛でなんとかしてみる

115:名無しさん@お腹いっぱい。
06/01/06 18:30:00
否定疑問文に
「んなことない」みたいな答え方はどうしたらいい?

116:名無しさん@お腹いっぱい。
06/01/06 18:35:30
>>115
■スレッド立てるまでもない質問スレッド Part112◆
スレリンク(english板)

117:名無しさん@お腹いっぱい。
06/01/06 18:42:23
112は最近英語を知った厨房にすぎない

118:名無しさん@お腹いっぱい。
06/01/06 19:12:12
>>115
Yes. と答えればいいだけ。

119:名無しさん@お腹いっぱい。
06/01/06 19:39:41
>>115
「んなことない」= "There is no such Japanese zither."

120:名無しさん@お腹いっぱい。
06/02/08 18:38:37
@

121:名無しさん@お腹いっぱい。
06/02/08 19:42:26
ウナコーワ足んない

122:名無しさん@お腹いっぱい。
06/04/12 02:41:13
深夜上げ

123:名無しさん@お腹いっぱい。
06/08/22 16:18:15
ウムムム

124:名無しさん@お腹いっぱい。
06/11/03 09:37:20
同じ文字が3文字連続していたら表示したいのだが

125:名無しさん@お腹いっぱい。
06/11/04 02:04:43
>>124
スレリンク(unix板:600番)

126:名無しさん@お腹いっぱい。
06/11/14 20:28:59
grep, sed, awk
URLリンク(www.shuwasystem.co.jp)
この本ってどうですか?
単なるマニュアル以上の情報は載ってる?

127:名無しさん@お腹いっぱい。
06/11/14 20:59:20
このシリーズはなんとなく印象が悪いので手にとってないな。そういえば。

128:名無しさん@お腹いっぱい。
06/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

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


129:名無しさん@お腹いっぱい。
06/11/18 11:48:03
>>128
sed 's/\(...\)\(...\)/^\1,\2/' file1.txt | egrep -f- -v aaa.csv

130:名無しさん@お腹いっぱい。
06/11/18 12:30:05
>>129
突っ込みだけでスマン。それだと、
111,222999999999,333,444
なんていうのがaaa.csvにあると、これも削除されるぞ。

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



131:名無しさん@お腹いっぱい。
06/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
とスペースが入っている場合すらあります。

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



132:名無しさん@お腹いっぱい。
06/11/18 23:16:33
>>131
仕事で必要ならコンサルタントを雇いなさい。

133:名無しさん@お腹いっぱい。
06/11/19 01:09:53
perl かなんかで書いちゃった方が早いよ。

134:名無しさん@お腹いっぱい。
06/11/19 07:09:03
sed,awk=perlかなんか

135:名無しさん@お腹いっぱい。
06/11/28 22:11:41
職場のマシン、perlが入ってなかった・・・ orz

136:名無しさん@お腹いっぱい。
06/11/28 22:52:45
この場合は、sedよりawkなんかな?
awkで書いてスピードアップのためのawkccしてしまうとか。


137:名無しさん@お腹いっぱい。
06/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:名無しさん@お腹いっぱい。
06/12/07 20:54:41
>>137
awk -f test.awk -v HENSU=${HENSU}
じゃね?
確認はできんが

139:名無しさん@お腹いっぱい。
07/02/04 08:46:50
ある文字列を
現在時間+引数
に置換したいのですが、どのようにすればいいですか?

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

ちなみに、sed とawk は使えるみたいです。

140:名無しさん@お腹いっぱい。
07/02/06 00:47:03
>>139
引数によるけど、dateコマンドが使えてたら、OKでは。
$ date +%R
00:45
$ date --date '6 min ago' +%R
00:39
という感じで引数を与えるといけると思う

141:名無しさん@お腹いっぱい。
07/02/11 21:34:20
入力ファイルを書き換えることはできる?

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

つまり、余計なファイルは出力させたくないんだよ。

142:名無しさん@お腹いっぱい。
07/02/11 21:46:12
>>141

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

あるいは
スレリンク(unix板:708-727番)
あたりを参照

143:141
07/02/11 21:57:51
>>142
情報サンクス
a. の方法を用いました


144:名無しさん@お腹いっぱい。
07/02/11 22:27:47
問題解決したようだけどこぴぺして編集

・-i オプションをつかう
・-i オプションがないsedをつかっているなら in-place editing 対応の sed の導入を検討する
・ed をつかう
・perl を使う
・一時ファイルを必要としないファイル命名法を検討する
URLリンク(www.idaemons.org)  を使う
・(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:名無しさん@お腹いっぱい。
07/02/11 23:12:50
>>144
まとめ乙

146:名無しさん@お腹いっぱい。
07/02/26 05:04:17
あってもなくてもいい追加
HP-UX 11i Version 2: September 2004
URLリンク(docs.hp.com)
AIX 5L Version 5.2
URLリンク(inetsd01.boulder.ibm.com)
SunOS 5.10
URLリンク(docs.sun.com)

いづれも 標準 sed に -i オプションは無い

147:名無しさん@お腹いっぱい。
07/02/27 15:18:51
irix
URLリンク(techpubs.sgi.com)

148:名無しさん@お腹いっぱい。
07/04/16 23:15:15
仕事で root してる人に質問です。
皆さんどれぐらい仕事で sed スクリプト書いてます?

スクリプトの後々のメンテナンスと、既に周囲に読める人があまり
居ないこととを考えると、s での置換以外では perl を使うか、そ
うなったらもう全部 perl にした方がいいのかなと最近思ったりし
ます。

6行の sed スクリプトを書いたのですが、コメントが 8 行になっ
てしまって。。。


149:名無しさん@お腹いっぱい。
07/04/17 00:51:04
sedで複数行書くのは犯罪だ。awkで書こう

150:名無しさん@お腹いっぱい。
07/04/17 00:55:39
そんなん読めないやつに管理まかせちゃいかんよ。

151:名無しさん@お腹いっぱい。
07/04/18 23:42:12
>>148
すぐに読めなくても、それがsedのスクリプトであることを書いておけば、
perlを使えるひとならちょっとの手間で読めるようになるでしょ。
そうでなければ>>150ということに。

それから、6行のスクリプトのコメントが8行になっても、それはそれでいいじゃないか。

152:名無しさん@お腹いっぱい。
07/04/19 01:05:48
sedの複数行は本当に頭痛がしてくる。
perでlさえ可読性悪いと言われてるのにその比じゃない。
個人的趣味以外で書いてはいけない

153:名無しさん@お腹いっぱい。
07/04/21 01:38:29
sed のコードのそばに、
それを perl なり awk なりで書いたものを
コメントとして残せば
・可読性→クリア
・コメント行数→クリア
・メンテ→工数倍w

154:名無しさん@お腹いっぱい。
07/04/21 03:10:13
s2pでいいじゃん、とかおもったりおもわなかったり

155:名無しさん@お腹いっぱい。
07/05/08 00:15:31
sedで千行あるファイルの
100行目から150行目を
抜き出すには
どうしたらいいですか

156:名無しさん@お腹いっぱい。
07/05/08 00:17:32
sed -ne "100,150p"

157:名無しさん@お腹いっぱい。
07/05/08 11:04:38
sed -n 100,150p

158:名無しさん@お腹いっぱい。
07/06/04 20:43:16
単語の置換をしたいんだけど、どうしたらよいでしょうか


具体的な例で言うと、あるソース中の int を char に全置換したい
んだけど 単純に sed "s/int/char/g" だと printf まで変わって
しまうから それは避けたい。
「単語」の条件は 英数字+アンダースコア (\w+) であること。

これ絶対FAQだと思うんだけど、 「sed 単語 置換」 で検索しても
答にたどり着かなかったのですよ。 困った。

159:名無しさん@お腹いっぱい。
07/06/04 21:26:42
perl -pe 's/\bint\b/char/'

160:名無しさん@お腹いっぱい。
07/06/04 21:37:31
>>159 アフォか

正解:

sed 's/\<int\>/char/g'

161:158
07/06/04 22:15:45
>>159
ありがとうございました!
うまくいけました。

162:名無しさん@お腹いっぱい。
07/06/04 22:20:07
\< \>で思い出したけど、HP-UXのgrepではこれ使えんのだよな。
同じregexpライブラリを使っているなら、sedでも使えんな。


163:159
07/06/04 23:51:11
スレタイ読まずに書き込んで感謝されちゃったよ

こういうのを
いたたまれない気持ち
っていうのかな

164:名無しさん@お腹いっぱい。
07/07/01 11:49:33
1
2
3
4
というtemp.txtをsed N temp.txtとすると
1
2
3
4
になるのはわかるのですがsed n temp.txtにすると
2
3
4
にならないのはどうしてですか
夜も眠れません

165:名無しさん@お腹いっぱい。
07/07/03 10:30:14
sed -e N -e 's/^/X/' -e 's/$/x/'
sed -e n -e 's/^/X/' -e 's/$/x/'

166:名無しさん@お腹いっぱい。
07/07/03 18:48:39
下記のように、置換する文字に変数って使えないんでしょうか?
設定ファイル100個飛ばしてしまったorz
forでループして、一気に変えたいんですが、$mlとそのまま置換されて
しまいます。このままだと、全部手がきです(T.T)
どなたかお助け下さい。

ml=hoge
sed 's/$ml/foo/'

167:名無しさん@お腹いっぱい。
07/07/03 18:51:10
>>166
それはsedじゃなくて、シェルスクリプト側の話だね。
' ' じゃなくて " " を使う。

sed "s/$ml/foo/"

168:名無しさん@お腹いっぱい。
07/07/03 19:17:43
そしてmlが"/"を含んでいて破滅する。

169:名無しさん@お腹いっぱい。
07/07/03 19:30:17

できました!(T.T)
ありがとうございました。一時は徹夜を覚悟しました。
本当に助かりました。ありがとう!

170:名無しさん@お腹いっぱい。
07/07/09 22:52:03
>>168
まさにそれ。
やりたいのは、特定の文字列を
現在のディレクトリ位置に置換したいということなんですが、
シェルスクリプトで
sed s/hoge/$PWD/g < file1.txt > file2.txt
と書くと、エラーになってしまいます。
($PWDが/を含んでいるから)
だれかうまいやり方わかりませんか?

171:名無しさん@お腹いっぱい。
07/07/09 22:54:37
sed "s|hoge|$PWD|g" < file1.txt > file2.txt

172:名無しさん@お腹いっぱい。
07/07/09 23:43:40
>>171
はやっ!ありがとー!
でもごめんなさい、実は明後日まで試せる環境がないので、
また試せたら報告に来ます。


173:名無しさん@お腹いっぱい。
07/07/12 20:37:34
sedでラベルを1行スクリプトに組み込むのは無理ですか?
sed '/^$/!{N;};/^$/{s/\n //g;}
Nが終わったあとにスクリプトの最初に戻したいのですが美味くいきません・・・

174:名無しさん@お腹いっぱい。
07/07/12 21:01:50
【参院選】民主党から、在日コリアンの期待背負った金氏(民団幹部)が立候補…在日参政権訴え
スレリンク(newsplus板)l50

175:名無しさん@お腹いっぱい。
07/07/12 21:55:25
>>173
普通にできるけど。:label; hoge; b label みたいに。

176:170
07/07/12 23:18:53
報告おくれましたが、無事できました。
本当にどうもありがとう!

177:名無しさん@お腹いっぱい。
07/07/14 03:55:18
>>173
-e

>>175
普通じゃない

178:名無しさん@お腹いっぱい。
07/07/14 09:07:49
>>177
>>173 の質問読み直せ。-e で連結する話とは違うぞ。

>>175 が正解。たぶん、>>173 はラベルの後のセミコロン忘れてできなかったんだろう。

179:名無しさん@お腹いっぱい。
07/07/14 09:12:01
省略せずに結果を書くと、

sed ':label;/^$/!{N;};b label;/^$/{s/\n //g;}'

↑な。これで何をやりたいかは知らんが。

180:名無しさん@お腹いっぱい。
07/07/14 13:40:28
>>178
ラベルの後に続けて書けるのはGNU含む一部のsedのみ。
だから普通じゃない。
普通はラベルごとに切って -e で繋ぐ。

sed -e ':label' -e '/^$/!{N;};b label' -e '/^$/{s/\n //g;}'

181:名無しさん@お腹いっぱい。
07/07/19 11:31:07
タブ文字(0x09)だけをカンマに置換する方法はありますか?
バージョンはGNU sed の 3.02です。

182:名無しさん@お腹いっぱい。
07/07/19 11:46:36
普通に sed 's/\t/,/g'

183:名無しさん@お腹いっぱい。
07/07/19 12:11:34
>>182
3.02は\tを使えません

184:名無しさん@お腹いっぱい。
07/07/19 12:14:25
>>181
普通にタブ文字を入れる。

185:名無しさん@お腹いっぱい。
07/07/19 12:16:24
普通に sed 's/ /,/g'

タブのところは、シェル上なら Ctrl-Vに続けて入力。
シングルクォート必須。

なお、上の sed をコピペしても、TABが表示上で変換されてるので動かないと思う。

186:名無しさん@お腹いっぱい。
07/07/19 13:25:58
>>184
T=`echo -ne "\t"`
sed -e "s/$T/,/g"
で出来ました。
ありがとうございました。

187:名無しさん@お腹いっぱい。
07/07/19 13:31:46
>>186
そんなことしなくても、普通に >>185 でできるわけだが、、
何をわざわざ大変なことしてるだよww

188:名無しさん@お腹いっぱい。
07/07/19 13:35:52
>>185 では動きませんでした。よく知りもせず、確認もせずに回答しないでください。

189:名無しさん@お腹いっぱい。
07/07/19 13:41:02
>>187
あとで自分のシェルプログラムを読むときに
見えないタブコードのままだと誤解をしそうだし
Ctrl-Vという入力方式が使えない端末もあるので
あえて大層に書きました。

190:名無しさん@お腹いっぱい。
07/07/20 15:25:43
改行が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:名無しさん@お腹いっぱい。
07/07/20 16:06:36
>>190
普通に sed 's/$/\r/'

192:190
07/07/20 18:19:11
出来ました。


193:名無しさん@お腹いっぱい。
07/07/21 00:53:54
おお、ちょうどいい!もれも似たようなことで
CR/LFを<BR>にしたかったw

dクスでつ190-191

194:名無しさん@お腹いっぱい。
07/08/08 19:34:32
正規表現にマッチした文字列だけを出力したい というとき

たとえば文字列の前の方の数字だけ取り出すときは
sed -n "s/^\s*\([0-9]*\).*$/\1/p"
みたいに 正規表現にマッチした全体をマッチした部分で置換する
ようにやってたのですが、いちいち置換するのは 格好悪いので
部分\1だけ出力するような格好いい書き方ありませんか?

195:名無しさん@お腹いっぱい。
07/08/09 00:53:55
perl -nle 'print $1 if /\b(\d+)/'

196:名無しさん@お腹いっぱい。
07/08/09 03:14:20
>>194
GNU grep の -o オプションを使う。
ほかの grep だったらごめんなさいw


197:名無しさん@お腹いっぱい。
07/08/09 13:19:08
sedスレのつもりだったんだけど、まあいいや。ありがとん。

198:名無しさん@お腹いっぱい。
07/08/16 23:03:21
あるテキストファイルの1行目〜最終行の1000行前までを
取り出したいのですが、どのようにすればよいでしょうか?
(ちょうど tail -n 1000 tmp.txt で取り出せない部分を
簡単に得たいのですが)

199:名無しさん@お腹いっぱい。
07/08/16 23:07:04
awk '{a[NR]=$0}NR>20{print a[NR-1000]}'


200:名無しさん@お腹いっぱい。
07/08/16 23:08:31
まちがえた。
sedでやっても美しくならないから、awkで
awk '{a[NR]=$0}NR>1000{print a[NR-1000]}'


201:名無しさん@お腹いっぱい。
07/08/17 08:48:47
sed -n '1h;1!H;1001,${g;P;s/[^\n]*\n//;h}'

202:名無しさん@お腹いっぱい。
07/08/17 12:49:09
sedでやらなきゃいかんの?

203:名無しさん@お腹いっぱい。
07/08/17 13:44:34
>>202
sedスレなので

204:名無しさん@お腹いっぱい。
07/08/17 14:06:45
なんでsedスレを選んだんだろ。

205:名無しさん@お腹いっぱい。
07/08/17 15:15:15
そこにsedがあるから

206:名無しさん@お腹いっぱい。
07/08/17 21:24:35
>>200
>>201
レスありがとうございました。大変助かりました。
今回はawkを使おうと思いますm(__)m

>>202
すみません、sedを覚えたての初心者なもので・・・

207:名無しさん@お腹いっぱい。
07/08/21 03:25:33
sed -n ':b;1001,${P;N;D};N;bb'

詰め

208:名無しさん@お腹いっぱい。
07/09/06 11:55:22
下のような行があったとして

command, --いろいろなコメント

command, だけ残して、--いろいろなコメント(--から後ろ)を全部削除
したいのですがどうすれば良いんでしょうか?
本を読んでもよくわかりません。どうかお助け下さい。


209:名無しさん@お腹いっぱい。
07/09/06 12:02:37
sed 's/--.*//'

210:208
07/09/06 12:05:26
消えました!
ありがとうございました!>>209

ほんと助かりましたです。

211:名無しさん@お腹いっぱい。
07/09/06 13:04:52
質問ばかりで恐縮なのですが、もうひとつ質問があります。

line...$

な行があったとして、^line を見つけた時に、下のようにおしりに
HOGEな文字列を追加したい場合はどうすれば良いのでしょうか?

line... HOGE$

ほんと、勉強不足で申しわけありません。オライリー本を片手にやってる
のですが、どうしてもわかりません。

212:名無しさん@お腹いっぱい。
07/09/06 13:12:43
>>211
sed '/^line/s/\$$/ HOGE$/'

address について調べれ。

213:名無しさん@お腹いっぱい。
07/09/06 13:31:20
>>211 の $ は文字じゃなくて、正規表現の $ の意味ではないのかと

214:名無しさん@お腹いっぱい。
07/09/06 14:15:56
>>212-213

ありがとうございました。

sed '/^line/s/$/ HOGE/'

でうまくいきました。addressについても勉強してみます!

215:名無しさん@お腹いっぱい。
07/10/07 16:15:05
仮ファイルを使わずに
入力ファイル自身を書き換えることは出来ますか?

216:名無しさん@お腹いっぱい。
07/10/07 16:58:58
-i

217:名無しさん@お腹いっぱい。
07/10/11 01:21:12
//exec($command,$arg);
とコメントアウトされた行をアンコメントしたいんだけど
sed 's/\/\/(exec\(\$command,\$arg\);)/\\1/' -i hoge.php
とかやっても思ったとおりに置換されない

(とか$とか/とかをうまくエスケープできてないだけなのか
どうなのかがよくわかんないんだけど、どこが間違ってる?

218:名無しさん@お腹いっぱい。
07/10/11 01:30:55
sed -e 's@//\(exec(\$command,\$arg);\)@\1@'

219:名無しさん@お腹いっぱい。
07/11/11 11:05:40
教えて下さい。

12345kkk6789
23456kkk4321
32456kkk9876
のようなテキストファイルが複数あり、
各行のkkk以降(kkkも含めて)を削除したいです。
1日考えてダメだったので、だれかお助け願います。




220:名無しさん@お腹いっぱい。
07/11/11 11:11:26
sed -e 's/kkk.*//'

221:名無しさん@お腹いっぱい。
07/11/11 13:48:54
ありがとうございます。


222:名無しさん@お腹いっぱい。
07/12/19 03:19:13
sed -e '500,$d' の500の部分を変数にすることって出来ますか?

例えば、sed -e '$no,$d' みたいな感じで実行するとエラーになって困ってます。

223:名無しさん@お腹いっぱい。
07/12/19 03:39:03
>>222
シングルクォートをダブルクォートに変えてみな。

224:222
07/12/19 03:55:03
>>223
どうもです。
sed -e "$no,$d"という風に変更してみましたがダメでした…

そもそも変数を指定することが出来ないというオチなのでしょうか?

225:名無しさん@お腹いっぱい。
07/12/19 04:23:23
>>224
あ、>>222 をちゃんと見てなかった。
$d は変数じゃなくて行末とデリートか。
なら、後ろの $ はエスケープが要るな。

sed -e "$no,\$d"

> そもそも変数を指定することが出来ないというオチなのでしょうか?
sed 自身が変数を解釈しているわけではない。
この場合は sed に引数を渡すシェルが処理をしている。

bash を例にとって説明すると >>222 の形式では
シングルクォートの中身は展開されずに
そのままの文字列が sed に渡される。

ダブルクォートにすると中身を展開するので
$no と $d を変数と解釈して設定された値に
入れ替わったものが sed に渡される。

この辺の挙動をちゃんと知りたいのならおまいさんが
使っているシェルの man を読め。

226:222
07/12/19 04:41:38
>>225
エスケープしたら一発で成功しました!

225さんの説明を読んで、また一つ理解が深まりました。
どうもありがとうございました!

227:名無しさん@お腹いっぱい。
07/12/19 07:23:30
>>215
>>144

228:名無しさん@お腹いっぱい。
07/12/19 13:56:00
sedの置換について質問 (GNU sed 4.x)
タブ(\t)は置換できるのですが改行(\n)が置換できません。
例えば # cat a.txt
aaa
bbb
aaa(タブ)bbb

3行目の(タブ)区切りは置換できるけど1行目と2行目にマッチした文字を置換できません。
どうやったらできますか?


229:名無しさん@お腹いっぱい。
07/12/19 14:48:42
何をどう置換したいのだ?
sed のスクリプトのほうも示してほしいのだが


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

3484日前に更新/114 KB
担当:undef