1 :
名無しさん@お腹いっぱい。 :
04/05/28 16:56 sedスレッド
2 :
名無しさん@お腹いっぱい。 :04/05/28 17:06
2
sed -e '1,2d' -e '4,$d'
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 なかんじ?
>>5 はい。
#!/usr/bin/sed -f
{
=
N
s/\n/: /
s/^([0-9]: )/0\1/
}
としてもうまく行かなくて悩んでいます。
適材適所という言葉があるだろうに… % awk '{printf "%02d: %s\n", NR, $0}' test
例えば 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桁の行番号と:を追加するのはなぜうまく出来ないのか 疑問に思ったのです。
ム板のawkスレの住人だな?
13 :
名無しさん@お腹いっぱい。 :04/07/16 12:26
メールの中身で 添付ファイルのデータが開始するbase64という文字列があった後のデータ全部切り抜いて出力したいんですが sedで可能でしょうか?
15 :
名無しさん@お腹いっぱい。 :04/07/17 10:31
From: hoge hage <
[email protected] >
↑ これの < > の中に入ってるメールアドレスを、抜き出したいんですが、どうすればいいでしょうか?
sed 's/.*From.*<\(.*\)>.*/\1/' じゃダメ?
>16 ありがとうございます 後は加工して使おうと思います。
18 :
名無しさん@お腹いっぱい。 :04/09/20 15:15:15
ど素人です。 sedでMIFESのグローバル置換みたいなことってできないですか? あるディレクトリに存在する複数のファイルをワイルドカード指定で入力して 一括して置換してもとのファイルにリダイレクトしてやるみたいな。 下記のイメージで(下記はとおらないですけど・・)。 sed -e 's/aaa/zzz/g' < * > * 1日中ぐぐってぐぐってもがいたけどわかりませんでした。すごいひと教えてください。
すごくなくてもできる。とりあえず、シェルスクリプトすれに池。 もっと短くできるが、何をやっているかわかりやすく説明するのをかねて↓ find -type f | while read file ; do mv ${file} ${file}.backup cat ${file}.backup | sed -e "s/aaa/zzz/g" > ${file} done
>>19 おわっ。あっさりできたっ。どうもありがとです!
シェルスクリプトすごい便利。勉強しなきゃですね・・。
bash上でなのですが、 hoge=`echo ../tmp/work.c | sed 's/\//\\\//g'` を実行しようとすると、 sed: -e expression #1, char 9: Unknown option to 's' となってしまうのは、なぜですか? /を\/に置換したいだけなのです。
うーん、確かにシェル向けのネタなのかもですが、 echo ../tmp/work.c | sed 's/\//\\\//g' だけだと動くのがよくわからなくって。
いいことを教えてあげよう。 's@hoge@hage@g'とやってごらん。
command not found でした・・・って、そういう意味ではないのかな・・・。
s/..../..../g は s@....@....@g とも書ける という意味
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 を区切りにして何番目の要素って選択したほうがいいんじゃないの。
先頭の.* が % の直前までマッチし、 \d* が長さ0、 % が % にマッチ、 最後の .* が残りの部分にマッチしてるからね。
そもそも \d なんて使える sed あんの?
sedsedesedesedesed
33 :
名無しさん@お腹いっぱい。 :04/10/10 17:50:46
sed(sede){3}sed
34 :
名無しさん@お腹いっぱい。 :04/11/09 16:03:38
hosyu
しーずか〜な〜しーずかな〜 さーとのーあ〜きぃ〜 おーsed〜にきぃ〜のみが〜 お〜ちる〜よ〜は〜
36 :
名無しさん@お腹いっぱい。 :04/11/23 17:09:03
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
では文法エラーになってしまいます。
うちの 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の間にあるコードと解釈されるらしい。
なんでperl使わないの?
なんでperl使うの?
らくだ本に一万円投資しちゃったからとか。
どうやって perl インストールしたの?
インストールできなかったの?
51 :
名無しさん@お腹いっぱい。 :2005/03/24(木) 05:43:55
FreeBSD の sed って c コマンドの後のコマンドも実行するね。 これってバグじゃね?
perlは、難しいので sed & awkでやって逝く事にしました。
適材適所ってこともあるんだよもん。
若者は、PERLを消化して部位部位いわせsed&AWK何それ?状態 案外、sed&AWKを学ぶ必要がなかったりする? 新しいのについて行けずに、たちどまってしまったオッサンは、sed&AWK せめてPERLぐらいやる。だだでえくいっぱぐれてるのに 両方の言語を使用したことのあるエキスパートに意見を伺いたい sed&AWKなら簡単にできてPERLなら難しい処理例 PERLなら簡単にできてsed&AWKなら難しい処理例 若者、おっさんに向けての指針等など
sed 's/hoge/hage/' のほうが perl -pe 's/hoge/hage/' より短い。
ぐれてないでまず日本語を学ぶ >だだでえくいっぱ
大岡山のキティに英語の勉強しろといわれたので、伊藤和夫先生のテキストで勉強しました
-xx-xx-xxなperlは、使用しない故スティーブンス先生にも意見を聞きたいので
>>59 召還ヨロシク
sed 's/い/お/g' file で、 file内の「いっぱい」が「おっぱい」に置換されるのは、 正 常 !
s/い/お/g ←「g」付きだと置換結果は「おっぱお」じゃないの?
質問です。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 とするにはどうすれば良いのでしょうか。 よろしくお願いします。
>>62 man sed しました?
man sed の SEE ALSO 見ると、
GNU sed が regex(7) (POSIX 1003.2) に (大体) 準拠してるとあると思いますが、
POSIX 1003.2 に non greedy な量指定子は無いです。
何か他の方法をとる必要があるかと。
ありがとうございます、とりあえず>62に関しては 's/uge,[^,]*,//' とすることにします。
65 :
名無しさん@お腹いっぱい。 :2005/05/10(火) 18:46:02
abc xyzをaxbyczにしたいのですが
>>58 > 大岡山のキティに英語の勉強しろといわれたので、伊藤和夫先生のテキストで勉強しました
だれ?
sed 's/abc xyz/axbycz/'
>>65 echo abc xyz |sed -e "s/^/%/; :ll; s/[%]\(.\)\(.*\) \(.\)\(.*\)/\1\3%\2 \4/; tll; s/%//;"
>>66 >だれ? は、
>大岡山のキティ
>伊藤和夫
の以上2つのうち誰の素性を知りたいのだね?
68は「大岡山のキティ」本人で複数の人間に「英語の勉強しろ」と言っていた、 という可能性は無いの。
>>70 「大岡山のキティ」に心当たりがあるなら
>>66 のためにも、sedのsコマンドで「大岡山のキティ」を痴漢するってのは如何
GNU sedのVersion 4で、マルチバイトパッチをあてたVsersion 3みたく文字コー ドを決めうちして変換する(ctype=EUCみたいに)方法はないのでしょうか。 jiskan16.bdfに外字を足してテキスト処理をやっているのですが、行頭に外字の コードがくると、Version 4.1.4では誤認識してしまうのをなんとかしたいのです が。
grepもUTF-8使えるようになって欲すい。
FreeBSDでutf-8なロケールでgrep使えばOK。
sedで四則演算系は作れますか? 理由も教えてください。
宿題は自分で。
>>72 bashを使っているとして、LANG=ja_jp.eucJP sed -e "s/hogehoge/fugaguga/"
みたいなのじゃダメなの?
煽っても無駄ですよ。宿題は自分で。
75に答えているので78はレスしないでください。
>>77 情報小出しですみません。LNAGは設定してます。
ググってもsedの古いソースがみつからなかったので、とりあえずは、Vine2.6
の3.0.2 (だかなんだかの)のバイナリを入れて動かしてますんで、当面は困っ
てはいないのですが、システムのバージョン上げるときに、個別対応する項目
が増えるのは面倒だなと思って質問した次第です。
>>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
>>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由来だからここで伺ってます すみません
>>87 UNIX上のsedなら、それでちゃんと動作するよ。
90 :
87 :2005/07/15(金) 13:03:54
>>88 すみません、nkfで上記の置換を行う方法がわかりません
よければ教えてください
>>89 可能であれば、windowsで動作した方がいろいろと好都合
ですので...
>>90 UNIX上のsedでは動作
↓
sedの文法はそれで間違ってない
↓
Win版のsedのバグまたは仕様
↓
UNIX板でこれ以上聞いても無駄
92 :
87 :2005/07/15(金) 13:23:40
88、89さん申し訳ありません wiodows上でのsedでも87のsed置換は可能です 私の勘違いでした 改めて質問させていただきます 設定済みmeadowを使って リージョンを設定して M+shift+|で87のsedスクリプトを走らせた場合 \になってほしい部分が化けてしまいます 原因や対処方法がおわかりに方がいらっしゃったら ご教示願えませんでしょうか?
set-process-coding-system
94 :
87 :2005/07/15(金) 13:52:19
>>93 ヒントありがとうございます
上述したように
リージョンにコマンドを渡す方法を使う場合
set-process-coding-systemの記述は
どこに、こんな風に記述すればよろしいのでしょうか?
頭が悪いので設定方法がわかりません
よろしければ教えてください
>>94 ずっと効くから.emacs に書いとけ。
96 :
名無しさん@お腹いっぱい。 :2005/07/17(日) 00:37:09
>>92 半角かなばっかりの文書を置換するのはできるみたいですが
漢字が混じってたら漢字は化けます
対処方法がありますか?
>>96 > 対処方法がありますか?
おまえ朝鮮人のにおいがぷんぷんするんだが。
やっぱり朝鮮人だったか。おねがいだから、国に帰ってくれ。
sed /^$/q が「最初の空行までを出力する」ということで、メールのファイルからヘッダ部分を 抜き出すのに使えることがわかったのですが、その逆「最初の空行から後を出力 する」のはどうするのがよいでしょうか? 「sed ではなく○○を使え」とかいうことになるのかもしれませんが……
sed '1,/^$/d'
100 :
98 :2005/08/03(水) 00:43:23
>99 なるほど。「最初から空行までを削除する」と読むわけですか。 98の「空行が見つかったら終了する」も奥が深いと思ったのですが、まだまだ精進が 足りませんね。ありがとうございました。
101 :
名無しさん@お腹いっぱい。 :2005/08/30(火) 15:38:56
age
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 と出力されてしまいます. うまい方法はありませんか?
{\(.*\)}の部分が最長マッチしちゃんだから、ここのマッチが}で切れるよう {\([^}]*\)}に変えればいい。
105 :
103 :2005/10/12(水) 15:47:46
>>104 なるほど!
どうもありがとうございます.
106 :
名無しさん@お腹いっぱい。 :2005/11/24(木) 20:57:48
コマンドラインオプションの -n がよく理解できないんですが、どういう場面で使えばいいんでしょうか
matchしたところだけくださいってな場面
sedを「セド」と呼ぶぽ
設定ファイルのコメントを除くときとか
sedってホールドスペースは1個しか使えないの?
>>111 否定疑問文だから、英語で答えるなら
"No" が正解だろ。
否定疑問文に 「んなことない」みたいな答え方はどうしたらいい?
112は最近英語を知った厨房にすぎない
>>115 「んなことない」= "There is no such Japanese zither."
120 :
名無しさん@お腹いっぱい。 :2006/02/08(水) 18:38:37
@
ウナコーワ足んない
122 :
名無しさん@お腹いっぱい。 :2006/04/12(水) 02:41:13
深夜上げ
123 :
名無しさん@お腹いっぱい。 :2006/08/22(火) 16:18:15
ウムムム
同じ文字が3文字連続していたら表示したいのだが
このシリーズはなんとなく印象が悪いので手にとってないな。そういえば。
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 ご存知でしたら、ご教授ください。 よろしくお願いします。
>>128 sed 's/\(...\)\(...\)/^\1,\2/' file1.txt | egrep -f- -v aaa.csv
>>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
とスペースが入っている場合すらあります。
度々で恐縮ですが、
ご存知でしたら、ご教授ください。
よろしくお願いします。
>>131 仕事で必要ならコンサルタントを雇いなさい。
perl かなんかで書いちゃった方が早いよ。
sed,awk=perlかなんか
職場のマシン、perlが入ってなかった・・・ orz
この場合は、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 は使えるみたいです。
>>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 のファイル自身を書き換えたいんだけど、可能かな? つまり、余計なファイルは出力させたくないんだよ。
143 :
141 :2007/02/11(日) 21:57:51
>>142 情報サンクス
a. の方法を用いました
問題解決したようだけどこぴぺして編集
・-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 オプションは無い)
仕事で root してる人に質問です。 皆さんどれぐらい仕事で sed スクリプト書いてます? スクリプトの後々のメンテナンスと、既に周囲に読める人があまり 居ないこととを考えると、s での置換以外では perl を使うか、そ うなったらもう全部 perl にした方がいいのかなと最近思ったりし ます。 6行の sed スクリプトを書いたのですが、コメントが 8 行になっ てしまって。。。
sedで複数行書くのは犯罪だ。awkで書こう
そんなん読めないやつに管理まかせちゃいかんよ。
>>148 すぐに読めなくても、それがsedのスクリプトであることを書いておけば、
perlを使えるひとならちょっとの手間で読めるようになるでしょ。
そうでなければ
>>150 ということに。
それから、6行のスクリプトのコメントが8行になっても、それはそれでいいじゃないか。
sedの複数行は本当に頭痛がしてくる。 perでlさえ可読性悪いと言われてるのにその比じゃない。 個人的趣味以外で書いてはいけない
sed のコードのそばに、 それを perl なり awk なりで書いたものを コメントとして残せば ・可読性→クリア ・コメント行数→クリア ・メンテ→工数倍w
s2pでいいじゃん、とかおもったりおもわなかったり
sedで千行あるファイルの 100行目から150行目を 抜き出すには どうしたらいいですか
sed -ne "100,150p"
sed -n 100,150p
158 :
名無しさん@お腹いっぱい。 :2007/06/04(月) 20:43:16
単語の置換をしたいんだけど、どうしたらよいでしょうか 具体的な例で言うと、あるソース中の int を char に全置換したい んだけど 単純に sed "s/int/char/g" だと printf まで変わって しまうから それは避けたい。 「単語」の条件は 英数字+アンダースコア (\w+) であること。 これ絶対FAQだと思うんだけど、 「sed 単語 置換」 で検索しても 答にたどり着かなかったのですよ。 困った。
perl -pe 's/\bint\b/char/'
>>159 アフォか
正解:
sed 's/\<int\>/char/g'
161 :
158 :2007/06/04(月) 22:15:45
>>159 ありがとうございました!
うまくいけました。
\< \>で思い出したけど、HP-UXのgrepではこれ使えんのだよな。 同じregexpライブラリを使っているなら、sedでも使えんな。
163 :
159 :2007/06/04(月) 23:51:11
スレタイ読まずに書き込んで感謝されちゃったよ こういうのを いたたまれない気持ち っていうのかな
1 2 3 4 というtemp.txtをsed N temp.txtとすると 1 2 3 4 になるのはわかるのですがsed n temp.txtにすると 2 3 4 にならないのはどうしてですか 夜も眠れません
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
下記のように、置換する文字に変数って使えないんでしょうか? 設定ファイル100個飛ばしてしまったorz forでループして、一気に変えたいんですが、$mlとそのまま置換されて しまいます。このままだと、全部手がきです(T.T) どなたかお助け下さい。 ml=hoge sed 's/$ml/foo/'
>>166 それはsedじゃなくて、シェルスクリプト側の話だね。
' ' じゃなくて " " を使う。
sed "s/$ml/foo/"
そしてmlが"/"を含んでいて破滅する。
↑ できました!(T.T) ありがとうございました。一時は徹夜を覚悟しました。 本当に助かりました。ありがとう!
>>168 まさにそれ。
やりたいのは、特定の文字列を
現在のディレクトリ位置に置換したいということなんですが、
シェルスクリプトで
sed s/hoge/$PWD/g < file1.txt > file2.txt
と書くと、エラーになってしまいます。
($PWDが/を含んでいるから)
だれかうまいやり方わかりませんか?
sed "s|hoge|$PWD|g" < file1.txt > file2.txt
>>171 はやっ!ありがとー!
でもごめんなさい、実は明後日まで試せる環境がないので、
また試せたら報告に来ます。
173 :
名無しさん@お腹いっぱい。 :2007/07/12(木) 20:37:34
sedでラベルを1行スクリプトに組み込むのは無理ですか? sed '/^$/!{N;};/^$/{s/\n //g;} Nが終わったあとにスクリプトの最初に戻したいのですが美味くいきません・・・
174 :
名無しさん@お腹いっぱい。 :2007/07/12(木) 21:01:50
>>173 普通にできるけど。:label; hoge; b label みたいに。
176 :
170 :2007/07/12(木) 23:18:53
報告おくれましたが、無事できました。 本当にどうもありがとう!
省略せずに結果を書くと、 sed ':label;/^$/!{N;};b label;/^$/{s/\n //g;}' ↑な。これで何をやりたいかは知らんが。
>>178 ラベルの後に続けて書けるのはGNU含む一部のsedのみ。
だから普通じゃない。
普通はラベルごとに切って -e で繋ぐ。
sed -e ':label' -e '/^$/!{N;};b label' -e '/^$/{s/\n //g;}'
181 :
名無しさん@お腹いっぱい。 :2007/07/19(木) 11:31:07
タブ文字(0x09)だけをカンマに置換する方法はありますか? バージョンはGNU sed の 3.02です。
普通に sed 's/\t/,/g'
普通に sed 's/ /,/g' タブのところは、シェル上なら Ctrl-Vに続けて入力。 シングルクォート必須。 なお、上の sed をコピペしても、TABが表示上で変換されてるので動かないと思う。
>>184 T=`echo -ne "\t"`
sed -e "s/$T/,/g"
で出来ました。
ありがとうございました。
>>186 そんなことしなくても、普通に
>>185 でできるわけだが、、
何をわざわざ大変なことしてるだよww
>>185 では動きませんでした。よく知りもせず、確認もせずに回答しないでください。
>>187 あとで自分のシェルプログラムを読むときに
見えないタブコードのままだと誤解をしそうだし
Ctrl-Vという入力方式が使えない端末もあるので
あえて大層に書きました。
改行が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版 です。
192 :
190 :2007/07/20(金) 18:19:11
出来ました。
193 :
名無しさん@お腹いっぱい。 :2007/07/21(土) 00:53:54
おお、ちょうどいい!もれも似たようなことで CR/LFを<BR>にしたかったw dクスでつ190-191
正規表現にマッチした文字列だけを出力したい というとき たとえば文字列の前の方の数字だけ取り出すときは sed -n "s/^\s*\([0-9]*\).*$/\1/p" みたいに 正規表現にマッチした全体をマッチした部分で置換する ようにやってたのですが、いちいち置換するのは 格好悪いので 部分\1だけ出力するような格好いい書き方ありませんか?
perl -nle 'print $1 if /\b(\d+)/'
>>194 GNU grep の -o オプションを使う。
ほかの grep だったらごめんなさいw
sedスレのつもりだったんだけど、まあいいや。ありがとん。
あるテキストファイルの1行目〜最終行の1000行前までを 取り出したいのですが、どのようにすればよいでしょうか? (ちょうど tail -n 1000 tmp.txt で取り出せない部分を 簡単に得たいのですが)
awk '{a[NR]=$0}NR>20{print a[NR-1000]}'
まちがえた。 sedでやっても美しくならないから、awkで awk '{a[NR]=$0}NR>1000{print a[NR-1000]}'
sed -n '1h;1!H;1001,${g;P;s/[^\n]*\n//;h}'
sedでやらなきゃいかんの?
なんでsedスレを選んだんだろ。
そこにsedがあるから
>>200 >>201 レスありがとうございました。大変助かりました。
今回はawkを使おうと思いますm(__)m
>>202 すみません、sedを覚えたての初心者なもので・・・
sed -n ':b;1001,${P;N;D};N;bb' 詰め
208 :
名無しさん@お腹いっぱい。 :2007/09/06(木) 11:55:22
下のような行があったとして command, --いろいろなコメント command, だけ残して、--いろいろなコメント(--から後ろ)を全部削除 したいのですがどうすれば良いんでしょうか? 本を読んでもよくわかりません。どうかお助け下さい。
sed 's/--.*//'
210 :
208 :2007/09/06(木) 12:05:26
消えました!
ありがとうございました!
>>209 ほんと助かりましたです。
211 :
名無しさん@お腹いっぱい。 :2007/09/06(木) 13:04:52
質問ばかりで恐縮なのですが、もうひとつ質問があります。 line...$ な行があったとして、^line を見つけた時に、下のようにおしりに HOGEな文字列を追加したい場合はどうすれば良いのでしょうか? line... HOGE$ ほんと、勉強不足で申しわけありません。オライリー本を片手にやってる のですが、どうしてもわかりません。
>>211 sed '/^line/s/\$$/ HOGE$/'
address について調べれ。
>>211 の $ は文字じゃなくて、正規表現の $ の意味ではないのかと
>>212-213 ありがとうございました。
sed '/^line/s/$/ HOGE/'
でうまくいきました。addressについても勉強してみます!
215 :
名無しさん@お腹いっぱい。 :2007/10/07(日) 16:15:05
仮ファイルを使わずに 入力ファイル自身を書き換えることは出来ますか?
-i
//exec($command,$arg); とコメントアウトされた行をアンコメントしたいんだけど sed 's/\/\/(exec\(\$command,\$arg\);)/\\1/' -i hoge.php とかやっても思ったとおりに置換されない (とか$とか/とかをうまくエスケープできてないだけなのか どうなのかがよくわかんないんだけど、どこが間違ってる?
sed -e 's@//\(exec(\$command,\$arg);\)@\1@'
219 :
名無しさん@お腹いっぱい。 :2007/11/11(日) 11:05:40
教えて下さい。 例 12345kkk6789 23456kkk4321 32456kkk9876 のようなテキストファイルが複数あり、 各行のkkk以降(kkkも含めて)を削除したいです。 1日考えてダメだったので、だれかお助け願います。
sed -e 's/kkk.*//'
221 :
名無しさん@お腹いっぱい。 :2007/11/11(日) 13:48:54
ありがとうございます。
222 :
名無しさん@お腹いっぱい。 :2007/12/19(水) 03:19:13
sed -e '500,$d' の500の部分を変数にすることって出来ますか? 例えば、sed -e '$no,$d' みたいな感じで実行するとエラーになって困ってます。
>>222 シングルクォートをダブルクォートに変えてみな。
224 :
222 :2007/12/19(水) 03:55:03
>>223 どうもです。
sed -e "$no,$d"という風に変更してみましたがダメでした…
そもそも変数を指定することが出来ないというオチなのでしょうか?
>>224 あ、
>>222 をちゃんと見てなかった。
$d は変数じゃなくて行末とデリートか。
なら、後ろの $ はエスケープが要るな。
sed -e "$no,\$d"
> そもそも変数を指定することが出来ないというオチなのでしょうか?
sed 自身が変数を解釈しているわけではない。
この場合は sed に引数を渡すシェルが処理をしている。
bash を例にとって説明すると
>>222 の形式では
シングルクォートの中身は展開されずに
そのままの文字列が sed に渡される。
ダブルクォートにすると中身を展開するので
$no と $d を変数と解釈して設定された値に
入れ替わったものが sed に渡される。
この辺の挙動をちゃんと知りたいのならおまいさんが
使っているシェルの man を読め。
226 :
222 :2007/12/19(水) 04:41:38
>>225 エスケープしたら一発で成功しました!
225さんの説明を読んで、また一つ理解が深まりました。
どうもありがとうございました!
sedの置換について質問 (GNU sed 4.x) タブ(\t)は置換できるのですが改行(\n)が置換できません。 例えば # cat a.txt aaa bbb aaa(タブ)bbb 3行目の(タブ)区切りは置換できるけど1行目と2行目にマッチした文字を置換できません。 どうやったらできますか?
何をどう置換したいのだ? sed のスクリプトのほうも示してほしいのだが
230 :
228 :2007/12/19(水) 18:53:01
a.txtの内容 ---------- aaa bbb aaa bbb ---------- このa.txtを ---------- eee fff aaa bbb ---------- ↑のように置換したい。 sed -i 's/aaa\nbbb/eee\nfff/' a.txt これで出来ると思ったのですが出来なかったので。 どうやったらできますか?
-e 's/^aaa$/eee/' -e 's/^bbb$/fff/'
233 :
228 :2007/12/19(水) 19:47:13
訂正 a.txtの内容 ---------- aaa bbb ccc bbb ---------- このa.txtを ---------- aaa bbb ccc ddd ---------- ↑のように置換したい。 この文字は何行目にあるか不明だとして 一番下のbbbをdddに置換することはできますか?
>>233 ほれ、解答だ
↓
sed -n '${p;q};:s; N;s/ccc\nbbb/ccc\nddd/;P;D;b s'
236 :
228 :2007/12/19(水) 20:21:37
>>234 sedじゃなくてもいいですけど、置換できますか?
>>235 エラーがでました。
extra characters at the end of q command
>>236 俺のところではエラーにならないけどな。
わかりやすいように改行を入れるとこんな感じ
↓
sed -n '
${
p
q
}
:s
N
s/ccc\nbbb/ccc\nddd/
P
D
b s'
239 :
228 :2007/12/19(水) 21:26:39
1行で出来ませんか?
240 :
228 :2007/12/19(水) 21:30:49
sed -n '${p;q;};:s;N;s/ccc\nbbb/ccc\nddd/;P;D;b s'
sed -n "m(_ _)m|-_-|(っ゚ロ゚)っ"
sed: 1: "m(_ _)m|-_-|(っ゚ロ゚)っ": invalid command code m
( を に痴漢したいんだけど $ cat hoge | sed -e "s/\\\(/ /" ってやってもなんか駄目っぽい なんで?
>>245 シングルクォートならどうよ?
$ sed -e 's/(/ /' hoge
sedはバックスラッシュいらない。 グループ化したいときはいるけど。
>>246 シングルクォートならできるんだけど、なんかこう
どうしてもダブルクォートでやりたいお年頃なんです
大人になりましょう
ある単語(例:foo)をhoge-" と置換したいんですが、 sed -e "s/foo/hoge-"/g" だと当たり前だけどエラーが出ます・・・。 ダブルクォートとかって、どうやって指定したらいいんでしょう?
sed -e "s/foo/hoge-\"/g"
>>251 おお!ありがとう!!できましたヾ(゚∀゚)ノ
しかし>を認識しなくなってリダイレクトが使えなくなった・・・。
Winに組み込んだSedだからなのかなぁ・・・。
winのコマンドラインパーサーは腐っているから-fで渡したほうが精神的によろしい。
お邪魔します^^
あのスレの
>>144 さんありがとうございます
私の目標と現状を書いておいたほうが良いのかな
★Aタイトル一覧表を作る(”タイトル”の部分はそれぞれ対応したファイルにリンクを貼る)
★Bタイトル一覧表に対応したデータファイルをタイトルの数だけ作る
但し★Bを作成する前に全てのデータを1ファイルに集約した後ソートして
重複チェック、データ欠如のチェックしたいです
・データファイルはPC内にある既存のファイルから必要な部分を抽出して作成する
●必要な部分●
@<title>〜</title>(元ファイルは1行の場合と2行なたは3行の場合がある)
A<object 〜 /object>(元ファイルは1行の場合と2行なたは3行の場合がある)
B<span>〜</span>(備考欄に使おうと自分で全てのファイルに付け足しました現在はタグだけです)
(元ファイルから抽出と新規作成にタグだけ付け足しても同じ内容になります。どちらでも構いません)
他のところで教えてくれた方が居て★Aの作成と、★Bの@ABの個別取得できています
★Aの一覧表からテスト作成のリンクファイルに飛ぶことも出来ています
★Bのデータファイルを作れないで居ます
私のレベルなんですが他の言語スレで呆れ返られるくらいの初心者で
単語の名前や意味は殆どわからないです
結局、自分のやりたいことはファイル操作であることが最近知りました
それまでの経緯でHTMLとジャバスクリプトと正規表現の本
それからperlの本は自宅にあります
sed全くわかっていないです^^;
単語の意味がわからない事だらけで意味を調べて廻る事でせいいっぱいで
なかなか前進しないままです
とり急ぐわけではないのですが
もしよろしければお時間の都合の良いときだけで結構ですので教えて頂けましたら幸いです
どうぞよろしくお願い致します
>>ALL
Win版のsedの話なんだけど、sedスレがUNIX板とLinux板に
しか無いので誘導させてもらったけどいいっすか?
>>254 PerlやJavaScript(JScript)がわかるなら、そっちでやったほうがいいね。
マッチングさせたい物が1〜3行に渡るって所でモレにはわからん。
できるかもしれないが複雑になるような希ガス
144さん ありがとうです お声かけて頂いただけで嬉しかったです まだ解説本を購入して10日程です 全部読んでいないのでどこまでできるかわかりませんが 自力でもう少し頑張ってみます 本当にありがとうございました^^ お疲れのところすいませんでした
よく流れがわからんが やりたいこと全部を一気に教えてもらうとかせずに 知りたいポイントをしぼって一つずつ質問すれば答えてくれると思うよ。
各板で暗黙のルールみたいなのがあるんだろうか やりたいことは先に書いた通りなんだけど プログラム板というところで初めはHTMLの読み込み方を聞いてみたんですよ そしたら「何がやりたいのかよくわからん。もっと詳しく。」ばかりレスが付くんです それで私が「ファイルの読み込みです」と返事をすると「具体的にここに書かないとわからない」 これを繰り返しているうちに「後出し条件だ」とか「それはプロにしか出来ないレベル」とか 結局何も返答しないのに威張ってばっかり。 まるで解答者(のフリをして答えない)人の相手をするばかりで全く進まない 解答者らしき人を問い詰めていったら 私のような人間を探してネタをパクッタリいい人を装いながら客として誘導したり 最初から教える気は全く無いって事でした。無駄な時間ばかり過ぎていくので 板を変えてプログラマー板ってとこへも行ってみたのですが そこでも「もっと具体的に」「わからん全部書け」「質問以前に問題あり」 散々小ばかにされては解答は無し。 やはり同じような輩が蔓延っていました 2chで教えて貰おうとするのが間違っているのかもしれません 自分は今までパソコンソフトには全く興味が無かったので こういう汚い連中が露骨に威張り倒してるところがあるとは知りませんでした 他の板でもひどい言葉はよく見かけますが 大体はまともな意見が多いので誰かがフォローしてくれたりしますが パソコン関係は解答者が圧倒的に優位なようだ 「只で教えてるんだぞゴルァ」とかも言われました(一度も解答しない人にw) 只で教えたくないならスルーでいいのではと言い返したら 質問者としてなって無いとか言い出す始末 そういうことでまとめて書いておいたんです 解答者の振りをする連中は答えないのに質問者をいじって遊んでるんです でわ
うわぁ…これはひどい。 書き込む前に自分のレスを読み返してないのか? 全然まとまって無いし、誤字脱字だらけ。 スクリプト書く前にやりたい事を 簡潔な日本語で書く練習をした方が良い。 いや、マジで。
261 :
255 :2008/04/15(火) 07:51:22
>>258 暗黙のルールという訳じゃないけどできるだけ楽して、人から聞きだそうという態度の人は煽られるね。
あなたにそういうつもりは無くても例えば、せっかくこのスレまで誘導したのに、
>sed全くわかっていないです^^;
>もしよろしければお時間の都合の良いときだけで結構ですので教えて頂けましたら幸いです
これだけ見ると、1から10まで教えろって言ってるように見えるよ。
色々なスレを見ればわかるが、質問をして、あなたのように煽られる人と、
煽られない人がいるが、その違いがわからないのであれば、
「2chで教えて貰おうとするのが間違っているのかもしれません」という事。
みんなレスありがと
答えてくれたことにお礼を言うのは当たり前だと思うんだけど
今までのスレは答える前から上から目線で結局答えてくれない
この人たちは解答を知らないのでは?と思うようになったんですよ
昨日も私が質問しているように見えるので他の質問に答えれないだろ
あの質問もお前だろって言うので
「それ自分じゃないよその質問には答えてあげればいいよ」とかやりあってたら
その質問者が現れた
当然のように解答者にはペコペコ謝ってる(これからも解答してもらうために)
この先、解答は期待できない私には一言もなし
初心者用の解説本をヨンから来いと言われるんだけどファイル操作は初心者用ではわからないようだ
手持ちのperlは3冊ある(超初心者用、初心者用、命令逆引き辞書)
perl解説本ではファイル操作の解説に至るまでにCGIの解説ばかりだ
やっとファイル操作の解説まで読み進めたら5ページほどで終わってるorz
perlでファイル操作は中級レベルの解説本を買わなければいけないのかと思うようになった
他の言語を調べてみた
CとかjavaとかAjax
初めのほうからファイル操作は解説している
ただ解説に使っている言葉自体が命令を使って解説しているので自分には全く理解不能だorz
>>262 それ以外にも軽く10スレ以上は廻ったよ
それで何か言語を覚えなきゃダメだなってわかったんだ
結局、私の言いたかったのは答えれないのに答える振りしてまで 優位に立ちながら出てこなくてもいいのではないのかってこと どうせ答えないのにいかにも「解答欲しけりゃぺこぺこするのは当たり前だろカス氏ね」的な態度とって それで解答しなくても解答者を装ったほうがいいってことなのだろか 何もわからないことまでしゃしゃりでてこなくてもってことです 偽解答者なら私でも今からすぐにできそうだw
ちなみに某スレでdieがわかんないような逆引き辞書だよ って記載した後に解説本に載ってたサンプルが動かなかったので なぜエラーになるのかわからないって書いたら 難しいことには答えない でも何か答えなければって強迫観念でも沸き起こるのか 解答者を装いながら勉強するのも手段なんだろうけど なにがなんでもしゃしゃり出てくるのは過疎っているからだろね 悪循環板だ
>>261 の意味がわからないようだね。
>何もわからないことまでしゃしゃりでてこなくてもってことです
あんたが自由に質問をしていいように、他の人間もそれに対して自由にレスを付ける事ができる。
「わからないなら、しゃしゃり出てくるな」というのは単なるあんたの都合でしょ?
そうでなければ、そいつらを自分より低レベルだと見下したいのか。
そういう事をされて、このスレでクダを撒き、関係の無い人に八つ当たりをしているあんたは、
そいつらと同類という事に何故気付かない?
もう一つ。「自分」と「2ちゃんねる」のやり取りだと思っているようだけど、
レスをしているのは「個々の人間」だ。
あれだろ、渋谷までいきたいんですが教えてください。 って質問して 電車で、とかタクシーで、とか徒歩で、とか教えてくれてるのに 切符の買いかたがわかりません、とか タクシーって何ですか?とか 徒歩って何って読むんですか?とか 馬鹿な質問してるから飽きれられてるんだろ。
人生相談ならよそでやってくんないかな。 sedと関係ない。
>>263 >それで何か言語を覚えなきゃダメだなってわかったんだ
わかったけど勉強する気が無いわけ?
次から次へと言われるがままにPerl、JavaScript、サクラエディタ、awk、sedと
目先で楽できそうな物を追っかけてるから目的が達せられないんだ。
>初心者用の解説本をヨンから来いと言われるんだけどファイル操作は初心者用ではわからないようだ
参考書として勧められてない「独習Perl」が手元にあるが丁度半分まで読んだ所で扱われているが。
努力をしないで結果を得たいなら、それなりの報酬を出して人を募集するか、
質問専用掲示板で、具体的にサンプルを出し、これこれこーゆースクリプトを
書いて下さい、と依頼するかのどちらか。
http://okwave.jp/
sedは数年でなくなる
何いきまいてんの? パソコンソフトって結局ゲームソフトみたいなもんでしょ その操作を知ってるからって威張るもんじゃないよね 自分で作ったソフトじゃないんだから ゲームソフトの使い方だったら攻略本としてでるんだろうけどね ソフトの使い方を先に知ったからって偉いと思ってんならスルーすればいいじゃん メモ帳やペイントみたいなもんで使い方覚えたらどってことないと思う いざやり始めた人間をいじくって遊ぶなんて恥ずかしいね
やぁやぁ我こそはsedの達人なり〜〜 そやって表歩いてみ 誰か「キミ凄いんだ」と声でも掛けてくれたらいいねw 我こそはプログラマーなり〜〜〜〜腹いてー
高校、大学と印刷関係の工場でバイトしてたんだ 当時職人と呼ばれる連中はタバコくわえながら あごで指図しては怒鳴りあげたりやりたい放題 その頃何も知らなかったので「○○さん技術あるから仕方ないよね」みたいな空気があった ん? ちょっと待て! 機械の操作だけじゃん 今や家庭用のプリンターでも当時の技術を遥かに超えている 車にの運転とかもそうだよね 昔は女性が免許持って運転してると目立つしなんかあったら「女の運転わ・・」とか言われたもんだ 今の乗用車の性能で言えば当時のレーサーを余裕でぶっちぎれますw そんな感じで機械やソフトを開発してるのは偉いと思うけど 操作で自慢されても5年後にはもっと簡単で3日でものになるソフトが出てるかもしれないよ
以後放置で。
あらら、自分の非を指摘されて、それが正しいもんだから逆切れしちゃった訳ね。 まともに反論できないからって、お前の母ちゃんでべそーは無いよな(笑)
自分で作ったソフトでも無いのにw 使い方知ってるくらいでそこまで威張るか普通? そんなことぐらいで天狗になる奴リアルではいないよw ゲームの上手い子供が威張り倒してるのとどう違うんだ??? パソコンソフトの使い方ぐらいでこんなに意地になる連中マジで知らんわw 教えたくなければ知らん顔してればいいのに何が何でも答えるんだね(解答以外はwwwww) 多分、実社会でもずれてんだろなー キミはた迷惑だと思われてるかもしれないよw 廻りよく見てみw
何このスレ?
「教えて君」の見本のような奴だな。
おもちゃを上手く使いこなせたから自慢してるって程度じゃないな 頭小学生並みの幼児性w 上から目線が笑えるw こいつ 奴 プ 笑えるwww 言葉遊びできない奴は何やってもダメって典型
これほどの逸材を埋もれさせておくのはもったいないから age とく
これは壮大な釣りなのか?
一瞬、なりすましを疑ったが、
>>262 ,282を見ると、まさに本人だよな。
sedって文全体からある語句を置換するのは簡単だけど、 最初にマッチする語句だけ置換して後はそのまま出力しようとするとちょっと複雑になってしまうよね。 スクリプトの先頭に戻らない様なループを作らないといけない。
>>284 遠まわしに「最初にマッチする語句だけ置換をする簡易な方法はありませんか?」
って聞いてるのか?それとも独り言ならチラ裏へ。
% ( echo hogehoge; echo hogehoge ) | sed '0,/hoge/s/hoge/fuga/' fugahoge hogehoge GNU sed に限るようだが。
287 :
284 :2008/05/16(金) 21:22:18
>>286 レスサンクスです。ただ最初の0を1でやった場合はうまくいきませんでした。
s/hoge/fuga/
:loop
p
N
s/.*\n//
b loop
漏れの頭ではこんなのしか思い付きませんでした。
もっとスマートな方法があったら教えてください。
>>287 /hoge/{
s/hoge/fuga/
:loop
n
b loop
}
/me ?
290 :
名無しさん@お腹いっぱい。 :2008/07/07(月) 08:34:28
n文字目のxのみyに置換というのはどうすればいいですか
n文字目のxとは、 行頭から(n-1)個の文字のあとに出現するx のことか? 行頭からn回目に出現するx のことか?
293 :
名無しさん@お腹いっぱい。 :2008/07/07(月) 12:09:14
前者です
>>291 後者ですが、念のため両者の場合について教えてください
行頭から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を変数にするのは漏れには粍
()ってのは条件になるん?
297 :
290 293 :2008/07/08(火) 10:30:38
ありがとうございます 確かに.×4みたいに表現できたらかっこいいですが これで文句なしです!
>>297 ×4は無理っぽい。
echo x-x-x-x-x- | sed 's/\(\([^x]*x\)\{3\}[^x]*\)x/\1y/'
01101,"0600031","ホッカイドウ","サッポロシチュウオウク","キタ1ジョウヒガシ","北海道","札幌市中央区","北一条東",0 ↓ 01101,"0600031","ホッカイドウ","サッポロシチュウオウク","キタ1ジョウヒガシ","北海道","札幌市中央区","北一条東",0 この第5フィールドの半角英数だけ(2個有る場合もあり)全角にしたいのですが どのようにsedを作ればいいでしょうか?
>どのようにsedを作れば 釣りポイントはここですか?
その形式は、郵便屋の郵便番号データだろ。 エクセルか何かの一覧表をcsvに落としただけの代物だから そのままでは役に立たないよ。 そのままDBに格納し、専用プログラムで変換かけて正規化してる。
aaa.hoge bbb.hage ccc.foge とかいう文字列があって、*.hoge以外にマッチする正規表現って出来るのでしょうか?
スレ違い。正規表現スレに池
>>303 その文を素直に読むと、当該文字列にだけはマッチしない
正規表現と読めるが、書き込み子の心情を忖度すると、
sed 's/[a-c]{3}\.hoge/==matched==/' って事かな?
まあ、[a-c]* でも、(aaa|bbb|ccc) でも、[[:alpha:]]* でも、
マッチする表現は無数に有るけど、(・・に、だけマッチする)
を、求めているなら、そもそも*.hoge って見当外れだし、
要するに、何が知りたいのか良く分からん。
307 :
名無しさん@お腹いっぱい。 :2008/10/27(月) 23:08:07
ファイル内の、スペース+改行をスペースのみに置換したいのですが、 どのように記述すればよいのでしょうか。 データ数が数十万行あるため、ファイルを全部読み込んでから 置換する方法では、容量がオーバーしてしまいました。
>>307 Perl か何かで書いちゃった方が早いんじゃね?
309 :
名無しさん@お腹いっぱい。 :2008/10/27(月) 23:29:29
>>308 環境上、Perlを使用することができないんです。
sedでは難しいでしょうか。
環境によって違うと思うけど普通の書き方じゃダメなのか? s/ \n/ /g
311 :
名無しさん@お腹いっぱい。 :2008/10/28(火) 00:07:58
>>310 自分の環境では、\nが認識されませんでした。
>>311 OSの具体的な名前とかは出さないのな。
s/\
/ /g
では?
313 :
312 :2008/10/28(火) 02:56:53
すまん。勘違いした。 sed はPerlと違って、入力したときに改行を取り除いてからパターンスペースに送るから、 そこで改行探しても見つかりっこない。 んで、出力時に自動的に改行は付くし、これを抑制する手段はない。 せめて awk使っとけ。Perlなくてもawkはあるだろ。
314 :
312 :2008/10/28(火) 02:58:41
すまん勘違いしてた。 sedはPerlと違って入力時に改行を取り除くから、置換時に改行探したって見つかりっこない。 Nとかで次の入力を読んでくれば間に挟まるけど。
おまえらマルチに親切だな
316 :
名無しさん@お腹いっぱい。 :2008/10/28(火) 07:09:08
ありがとうございました。 sedでは難しそうですね。別の方法を探してみます。
微妙に変えてあるとこがうまいな。
tr -d '\n'
>>307 sed '
:again
/ $/{
N
s/?n//
b again
}
'
sedの公式ホームページってないのでしょうか awkは一応gawkがあって一応開発も続いているようですが sedはどのような状態なのでしょうか? いつまでたっても最短マッチを搭載しない理由もお教えねがいます。
そういう機能を追加すると、既存のスクリプトが動作しなくなるから。 ポータビリティを失ってまで実装する必要がない。(それこそ、perlでもawkでも使えばいい)
なるほど、参考になりました。 もし開発に参加できるなら参加したいと思っていたのですが そのような理由ならそういったときはperlやawkに頼る事にします。
>>322 sedに正規表現perl互換モードを搭載すればいいだけなのにね
GNU sedの-r みたいなので、perlモードがあればいいね。
>>321 gnu sed 拡張している人たちがいるからそのあたりに乗ってみれば?
onigsedじゃダメなのか? つーか、perl -pe でいいじゃん。
330 :
名無しさん@お腹いっぱい。 :2009/06/29(月) 20:49:52
質問させてください。 sedでホワイトスペースを解除または増やす方法ってあるのでしょうか?
331 :
名無しさん@お腹いっぱい。 :2009/06/29(月) 20:52:21
間違い。ホールドスペースです。
以下ホワイトベース禁止
白兵戦になるぞ!
334 :
名無しさん@お腹いっぱい。 :2009/07/03(金) 03:11:56
sedで、 /pattern/r file ってするとマッチした行の次にfileの内容が出力されますが、 その行の前に出力する方法はないでしょうか? ちなみにマッチする行は1個しかありません。
sed -n -e '/pattern/r file' -e p
ごめん、ダメだった。こっちで。 sed -n -e 'x;p;g' -e '/pattern/r file' 1行目の空行は無視して
1行めの空白はもう1段 | sed 1d で消せるけど…… 入力の最後の1行出てなくない?
338 :
336 :2009/07/04(土) 00:17:53
出てなかった。 sed -n -e 'x;p;g' -e '/pattern/r file' -e '$p' という感じで最後の行を出力することは出来るけど patternが最後の行の場合だけ、fileの内容が次行に出ちゃう。 自分はギブアップ
いろいろありがとうございます。 sed 1個では難しいようですね。 patternより前とpattern以後に別けて、 間にfileをcatするしかないのかもしれません。
sed 2個ならなんとか sed -e '$aEND' | sed -e ' $d /pattern/{ r file N } ${ P d }'
>>295 の例に似てますが、
バイナリファイル(1行めの)4バイトめを ASCII 文字 0x02 -> 0x03 に
変更するにはどうすればいいでしょう?
# sed -e '1s/^\(...\)\x02/\1\x03/' in > out
ではだめでした。
試した環境は FreeBSD 7.2 です。
>>341 (dd bs=3 count=1; dd bs=1 count=1 of=/dev/null; printf '¥003'; cat) < in > out
>>341 sed -e "1s/^\(...\)^B/\1$(printf '\03')/"
でできんかね。^BはC-v C-b入力できるはず。
>>343 最初の3バイトに改行文字がない保証がないから一般的にはだめそうだな。
やっぱ行指向のsedでバイナリファイルを操作するのは無理があると思う。
345 :
341 :2009/09/25(金) 12:31:36
\x02 などは GNU sed の拡張仕様でした。 # pkg_add -r gsed # rehash # gsed -e '1s/^\(...\)\x02/\1\x03/' in > out でできました。
>>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 です。
ひとつ、お聞きいたします。 Nコマンドって、最後の行で次行が読めない場合、何もせず終了、 のはずですよね。すると、 sed 'sed ':l;N;bl' <file> とすると何も出力されないんじゃないかと思うんですが、 私の使っているGNU sed 4.1.5版だと<file>の全部を出力してしまいます。 つまり、「何もせず終了」じゃなくて、「デフォルト出力して終了」 になっているように思われるわけですが、これは、どうなんでしょうか。
349 :
名無しさん@お腹いっぱい。 :2010/07/01(木) 23:39:24
なるほど
yコマンドで"/"を対象に入れたいんですが出来ないんでしょうか 初歩的ですいません
>>350 sed y,abc,ABC,
とかできるから、
sed 'y,ab/,ab%,'
もできる。
352 :
350 :2010/08/17(火) 23:26:44
そうか、区切り文字変えられるのsコマンドばかりじゃないんですね。 どうもありがとうございました。
353 :
初心者 :2010/10/23(土) 20:01:51
sedでシェルすくりぷとの行つなぎバックスラッシューを消して、繋ぐことできますか? perlなら-pe "s/\\\n//g"でできます。 edでも、awkでもできれば、教えていただけませんか?
354 :
名無しさん@お腹いっぱい。 :2010/10/24(日) 13:40:00
できる
355 :
初心者 :2010/10/24(日) 21:13:33
できました ありがとう
356 :
初心者 :2010/10/25(月) 22:07:05
できないようですね、残念です。
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'
踊っているように見えて仕方がない echo "000000$NUM" | sed -e 's/.*\(..\)\(..\)\(..\)/\1\2\3/'
sedでファイルのある部分までをファイル1、それ以降をファイル2に出力ってスマートにできませんか? 例えば100行のsample.txtというファイルで、 sed -e "50q" < sample.txt > sample1.txt sed -e "1,50d" < sample.txt > sample2.txt の様にするのは無駄におもえてしまいます。
360 :
名無しさん@お腹いっぱい。 :2010/11/28(日) 18:39:52
sed -ne '1,50w sample1.txt' -e '51,$w sample2.txt' < sample.txt とか?
split -50 sample.txt; mv xaa sample1.txt; mv xab sample2.txt
>>360 ,361
ありがとうございました。勉強になります。
363 :
名無しさん@お腹いっぱい。 :2010/12/22(水) 23:54:50
入力テキストを 1行目の内容 2行目の内容 2行目の内容 3行目の内容 : 最終-2行目の内容 最終-1行の内容 最終-1行目の内容 最終行の内容 という形(隣り合った行の値を空白で連結する)に変換するにはどう書けば よいでしょうか。 sed -ne '1!p;$!p' と通せば先頭末尾以外の行を2回出力できたので、 これを2行分ずつくっつければ出来そうなのですが…
364 :
名無しさん@お腹いっぱい。 :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
seq 1 10 | sed -ne '1h;1!{H;x;s/\n/ /;p}'
s/seq/jot/
367 :
名無しさん@お腹いっぱい。 :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 になると書いてありましたが、実行してみると並びはかわりませんでした。
>>367 確かに。それじゃぁ一番左側の .* が、最長一致で行全体に一致しちゃうから、
並びが変わらなくて正解。
悪書の書名晒して。
久野さんらしくないミスだな。 確かに変わらないね。
>>367 真中の * の直前のスペース、
スペース2つじゃないの?
コピペするとスペースが1つとかになるので注意。
>>371 はいそれです。解説にも
「これはどう読むかというと、『入力行を任意の文字列1と、空白のならび2と、また別の任意の文字列3
にマッチさせ、それ全体を3、2、1の順でつなげたものに置き換える』という意味になる。」と書いてあります。
>>372 なら、
>>370 の指摘通りで、キミが間違っている。
× sed 's/\(.*\)\( *\)\(.*\)/\3\2\1/' test.txt
○ sed 's/\(.*\)\( *\)\(.*\)/\3\2\1/' test.txt
2chに不慣れな感じ
專ブラなら安価ポップアップでちゃんと表示されるのかな
>>373
>>372 紙面上に、└┘└┘みたいな感じでスペースの個数は明示してあるの?
明示してないなら紙面が悪いと思うが。
>>373 空白2個ならいけるのですか。
>>376 そういう、└┘└┘みたいな感じはなかったです。文字数的にも一文字分の感じ
ですし。編集上のミスかもしれませんけど。
>>376 > 「これはどう読むかというと、『...、空白のならび2と、...
って書いてあるんだろ?
>>378 それは、¥2 のこと。「スペース2個」のことじゃないよ。
>>378 正規表現を理解してないバカ発見。
任意の文字列 → \1
空白の並び → \2
別の任意の文字列 → \3
と言ってるだけのこと。それとスペース2つ書くのとは意味が違う。
むしろhtmlのレンダリングを理解していない
任意の文字列の前か後ろの少なくともどちらかは、任意でない特定の文字・文字列(含^$)でないと困ったことになるということですね? 俺も前それで失敗した。
384 :
名無しさん@お腹いっぱい。 :2011/04/21(木) 06:41:06.41
sedの話題はこっちへ くれぐれもシェルスクリプトスレに書き込まないように!
>>377 \2,\3がφで全体がマッチ
\1に行全体
一つ目が\([^ ]*\)ならよかった。
AAA BBB=111 CCC=111 この行の111を000に置き換えするのに sed -e 's/BBB=111/BBB=000/' とする以外にもっとスマートな書式を教えてください。 GNU sedです
387 :
名無しさん@お腹いっぱい。 :2011/04/27(水) 12:11:27.62
>>386 > sed -e 's/BBB=111/BBB=000/'
これじゃ、お題
> この行の111を000に置き換えするのに
を満たさない。
矛盾を含む質問に答えることは不可能。
389 :
386 :2011/04/27(水) 13:29:23.92
>この行の111を000に置き換えするのに この行のBBB=111だけをBBB=000にする書式でした すいません。
スマートの基準がわからないけど、BBBが二度出現するのが嫌なら sed -e 's/\(BBB\)=111/\1=000/'
AAA BBB=111 CCC=111 DDD=111 EEE=1111
sed -e /BBB=/{'s/111/000/'} シェルスクリプトスレで覚えたやり方
394 :
名無しさん@お腹いっぱい。 :2011/05/18(水) 23:11:59.71
sed -e 's/<space><space>*/<space>/g' test.txt って動かないんですが?
動きますよ?
396 :
名無しさん@お腹いっぱい。 :2011/05/19(木) 10:16:19.05
EUCだとうまく動作しないのだが、これはデフォルトなのかな
EUCでも問題ないけど。
そもそも、EUCはそういうツールで不都合がないようにということで作られたわけで。 日本語独特の文節や漢字などに対応しない、というのはあるけど。
<space> ってそのまま打ってるってオチだろw
>400 そのとおりでした;すいません
EUCじゃないファイルではうまくいってたのか?
403 :
401 :2011/05/19(木) 20:27:32.13
>402 それは別人です
404 :
401 :2011/05/30(月) 17:29:13.86
偽物ばかり 氏ね
急に Windows 7 64 bit で ssed が使えなくなっま。
で?
xp モードで解決したわけですね
tab8のテキストをインデントを崩さずに半角スペースに置き換えるにはどうすればいいですか?
expand -8
sedで、じゃね。
エスパーすると質問者は手段はsedじゃなくても良いと考えてる
それならこのスレで聞かないでしょ。
sedでもできそうだと勘違いしたからでしょ
>>410 それなら「expand -8相当の処理をsedでやるには?」って聞くでしょ。
>>414 expand を知らなかった、という可能性は。
>>415 というかexpandを知らなかったからこそ
「tab8のテキストをインデントを崩さずに…」みたいな
まわりくどい言い方で聞いたんでしょ。
だからsedに関係なくexpandを回答すれば回答として十分。
>>416 expandを知らないけどsedを使わなければならない理由があるんだよ!
419 :
408 :2011/11/30(水) 17:44:22.28
すっごく登場しにくくなったけど
>>415 さんが正解です。
>>409 エスパーさんありがとう。
皆さん混乱させてスイマセンでした。置き換えと言えばsedしか知らなかったので。
420 :
名無しさん@お腹いっぱい。 :2012/04/06(金) 20:12:58.82
文字列unkoの行を見つけてから文字列chinkoの行まで表示 ってどうやればいいの?
>>420 当たり前過ぎるから回答は控えるけど、
エスパーすると -n オプション忘れて全部の行が表示されてしまったってオチだろな
そんなことなくてその当たり前すぎる内容がわからない初心者さんなんでしょう。 回答してあげないなんてひどいね
>>421 あ、-n だけのことだったんですね。失礼しました。
>>422 そこまで初心者じゃないです。
自己申告乙
初心者の土瓶口だけど、chinkoの前の行まで表示 ってのはできるの?
>>425 /start/,/end/{/end/!p}
>>426 いや、それは知ってるよ。
そういうことせずに直接○○の行の手前まで指定はできないのか聞いてるんだが
unkoの次の行から、ってのは難しいのかな・・・
>>428 startを含まず、endを含む場合
sed -n '1,/start/b; 1,/end/p'
みんな1行野郎なの? スクリプトファイルは書かないの?
>>430 スクリプト書くほどならperlで書いちゃう
perlは英語のマニュアルが読めなくて挫折した。あんときperlがんばっとけばよかったorz
書くよ
DTPでテキストの整形するとき、いっぱい痴漢(←なぜか第一候補)するよ。
>>432 俺はPerlは書籍で覚えたな、ラクダとあと何かUnixツールとして使うための本
436 :
名無しさん@お腹いっぱい。 :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 では';'や'+'が使えず、どうしてよいやら・・・
437 :
名無しさん@お腹いっぱい。 :2012/08/07(火) 00:42:37.55
パターンスペースが 空行だったらホールドスペースに追加 空行でなかったらホールドスペースを出力後にパターンスペース出力 最後の連続空行はホールドスペースに収まったままで終わる。 とか考えてみたがあってるだろうか。
Nコマンドを使っていて必要な最期の行を全部すっとばしたことが、私にもありました
439 :
名無しさん@お腹いっぱい。 :2012/08/07(火) 22:00:53.40
>>437 多分やりたいのはそれだと思います。
具体的に同書けばいいのでしょう?
もうawkかなにかで済ましてるだろうけど練習 437とは違うやり方になった sed -n -e ' :loop /^\n*$/{ N b loop } p '
>>440 ありがとうございます!
うまくいきました。
442 :
名無しさん@お腹いっぱい。 :2012/08/17(金) 16:05:21.04
gsedですが、 ブラケット開きがあって、ブラケット閉じ以外のものが1つ以上あって、ブラケット閉じがある場合、 で、これどこがおかしいのでしょうか? ★☆が現れてくれないんですけど。 s/\[\([^\]][^\]]*\)]/[★\1☆]/g
>>442 バックスラッシュが余計
sed 's/\[\([^]][^]]*\)]/[★\1☆]/g'
ありがとうございます。 つまり、[ と ] の間にあるものはどんなものでも 「これは文字です」と宣言しなくてもいい(\が要らない)ということですか。 やってみます。ありがとうございました。
>>444 そうなんだけど、] の場合は、[^ の直後にある場合のみ
普通の文字の ] とみなすという仕様。( [ の直後でも同様)
テキスト [aaa], [bbb] <あああ>の(アアア)と<いいい>の(イイイ) 欲しい結果 ★aaa☆, ★bbb☆ ★あああ☆の★アアア☆と★いいい☆の★イイイ☆ s/[<[(]\([^<>[]()][^<>[]()]*\)[>])]/★\1☆/g 予想はしたけど、まるで反応してくれません。 半角の約物3種類は欲張ったかなあ、と1つずつやってみているところです。
>>446 >>445 に書いてあること読めよ。
[^ の直後に ] を置かないと、普通の文字としては認識されないんだよ。
[^....] の中の .... の順番を変えろということ。
448 :
名無しさん@お腹いっぱい。 :2012/08/17(金) 18:41:47.66
>>446 s/[[<(]\([^]<>()][^]<>()]*\)[]>)]/★\1☆/g
>>447-448 ああ、すみません。言葉が足りませんでした。読んだ上でわざと変えてみたのです。
え?
ごめんなさい。
>>446 は[]の中の[]に全部\を付けたつもりでした(このミスが大元ですね)
エスケープすればどの位置にあっても文字とするというsedを使っていたのと、
最長一致の正規表現も使っていたので混乱してしまいました。
「直後」を何度も言われていたのに、「直後『だけ』」に思いが至りませんでした。
gsed で、置換コマンドの s を間違えて a と入力したスクリプトを実行したら、 一行ごとにその行が挿入されていて笑ってしまった。 a コマンドなんて知らなかったわ。
笑えんなぁ。
笑って許して♪
gsed って置換するときにタグの数が合ってなくてもエラーが出ないのね。
456 :
名無しさん@お腹いっぱい。 :2012/10/25(木) 23:53:29.32
aなんて、edの基本じゃん!
マニュアルでも最初のほうに来ちゃうしね
458 :
名無しさん@お腹いっぱい。 :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 これでは削除できませんでした。 改行を含む文字列を削除する場合どうしたらいいでしょうか?
sedでやるのは無理があるんじゃないか。
cat aaa | sed -e ':loop; N; N; !b loop; s/^<hoge>\n abc\n<\/hoge>//' これで良いのかな?
462 :
名無しさん@お腹いっぱい。 :2012/11/05(月) 14:31:53.41
>>459-461 ありがとうございます
しかし削除できませんでした
ちなみにsedじゃなくて何でやったほうがいいでしょうか?
Perl でも Ruby でも何でもいいよ。
464 :
名無しさん@お腹いっぱい。 :2012/11/05(月) 14:56:37.97
>>463 はい。ありがとうございます。できればシェルスクリプトで書きたいので
PerlでもRubyでも何でもいいとは思いますがそれ以外でいいコマンドはありませんでしょうか?
grep -n abc して、出てきた数字でsedスクリプト作っちゃうとか。
>>464 シェルスクリプトから呼び出せば良いんじゃないの?
sedだって所詮は外部コマンドだし。
>>482 sed -n -f hoge.sed <aaa
hoge.sed:
/<hoge>/b hoge
p
b end
:hoge
N
N
/<hoge>\n abc\n<\/hoge>/!p
:end
>>458 aaaがXMLならXMLパーサ(を使える言語)を使った方がいいと思う
/<hoge>/!b
:loop
$b last
/<\/hoge>/!{
N
b loop
}
:last
s/<hoge>[ \n\t]*abc[ \n\t]*\(<\/hoge>\)*//g
すみません。教えて下さい。 テキストの最終行のあとに空白行を1行入れる、というのはどう書くのでしょうか。 iコマンドでは最終行の前に空白行ができてしまいます。
sed -e '$a\ hoge '
ありがとう。助かりました。
最終行の後なら $ cat >> tmp $ で十分であるようにも思うけどなぁ
ああ、なるほど。いつか思い出して使うこともあるでしょう。ありがとう。
そうなんだけど、sedファイルの中に書き込みたかったんですよ。でも、ありがと
"foo"の在る行だけを対象にするから? どのみち見つけに行くんだから同じじゃん?と想ったり想わなかったり
>>476 100万行のテキストファイル、GNU版のsedで試してみたけど
どっちも変わらなかったぞ
つまり、都市伝説って事か どのsedかによっても違うんだろう
対象になる行の割合にもよるんじゃないの?
481 :
478 :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
>type diff diff is /usr/bin/diff > type diff | sed 's,[()],,g;s,^[^/][^/]*,,;q' /usr/bin/diff s,[()],,g;s,^[^/][^/]*,,;q' ってどう解釈すれば良いんですか?
人それぞれ で良いんじゃない
Macでgsedを使っています。やりたいこと ★のある行と☆のある行の間にある行のうち、ひらかなを含む行の行頭に@を付ける。 (ひらかなが1文字でも入っていれば良い) /★/,/☆/{ /[あ-ん]/s/^/@/ } 無視されてしまうんです。助けてください。
485 :
484 :2013/05/21(火) 08:34:08.57
[あ-ん]がいけなかったみたいです。[あいうえお(中略)ん、。]でできました。
あ-ん♪
>>484 ぽーつ使ってるならssed入れてpcre環境にすれば\p{Hiragana}とか
できるんじゃね
ごめんワカンナイ
ssedって次期GNU sedのこと。 GNUのページでもこの拡張には依存するなって書いてる。 ただ、macでBSD系のsedじゃなくGNU sed使ってるんなら port依存って意味ではあんまり変わんないんじゃない?
>>334 横から&亀だが
sed '/pattern/ {
'"`sed 's/^/i\\\\\n/' <file`"'
}'
gnuWin32のsed version4.2.1です sedで、"を入れたくて下記のようにしたのですが、うまくいきません。どうしてでしょうか sed -e "s/^/ \"/" hoge.txt > hoge2.txt エスケープの\がうまく利かず、 sed: >を読み込めません というわけわからんエラーメッセージが出てきます ちなみに、 sed -e "s/^/ \\/" hoge.txt > hoge2.txt とかならちゃんと動きます
>>491 UNIX板で答えない方が良いのかもしれませんが、適当なスレが無さそうなので
windows のコマンドプロンプトで実行しているとして答えます。
cmd.exe の仕様が原因と思われる
sed -e "s/^/ "^""/" hoge.txt > hoge2.txt
sedを使用する際の注意事項があります。 コンピュータのCPUが何ビットであるか調ベておく事が大切です。 32ビットCPUを搭載したコンピュータには、 32ビット用のsedをインストールすること。 64ビットCPUを搭載したコンピュータには、 64ビット用のsedをインストールすること。 これを間違えれば正常にsedが動作しません。
sedの使い方がわからず、試行錯誤しているのですが、うまくいきません。 行の先頭に特定の文字列(たとえば"abc")があったらその行を丸ごと"xxxxxxxxxxx"に置換するにはどうすれば良いでしょうか。 例: abc123456 が xxxxxxxxxxx に変換さえるイメージです。
>>494 sed -n /^abc/p
sed s/^abc.*$/xxxxxxxxxxx/
496 :
名無しさん@お腹いっぱい。 :2014/08/20(水) 01:39:49.69
パイプで使うバージョンを書く |sed 's/^abc.*/xxxxxxxxxxx/'
sed '/^abc/cxxxxxxxxxxx'
abc -> xxx abc123 -> xxxxxx abc12345 -> xxxxxxxx をsedでやるならどう書くんだろ
>>494 sed '/^abc/s/./x/g'
かな?
パスワードのゼロ埋め(ゼロパディング)と見た。
502 :
名無しさん@お腹いっぱい。 :2014/10/21(火) 08:56:25.00
バックスラッシュって読みやすいか?日本語だと使い道無いし。 プログラミングで正規表現書いてると、 s/\dhoge\sfuga\s/hoge/ ↑似たような記号ばっかりで読みづらいw s/¥dhoge¥sfuga¥s/hoge/ ↑こっちのほうが読みやすい
使い道ある記号だったらエスケープシーケンスにも 円記号ねじ込むにも適さなかっただろうよ
最近可愛く見えてきた。意味を持たない組み合わせに腹を立てたり。
スラッシュとバックスラッシュが紛らわしいんならスラッシュ以外の 文字を区切りに使えばいいんでないの?
区切りを変更できるのはsコマンドとかの時だけ
507 :
名無しさん@お腹いっぱい。 :2014/11/06(木) 07:19:05.88
1,/hoge/ のようにaddressに正規表現を使う時のスラッシュを
他の記号に変えることはできますか?
s@
http://@ https://@ のようなことをしたいのです
できる実装もあるかもしれない
コピペ改変にかまうな
511 :
名無しさん@お腹いっぱい。 :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 を取得したいのですが、 どう書けば良いのでしょうか?
s,.*/,,; s,\.txt.*,,
ありがとう
おおお、グレート義太夫