>>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.*,,
ありがとう
おおお、グレート義太夫