sed
1名無しさん@お腹いっぱい。
NGNG sedスレッド
2012/08/19(日) 00:04:02.62
え?
2012/08/20(月) 16:08:01.31
ごめんなさい。>>446は[]の中の[]に全部\を付けたつもりでした(このミスが大元ですね)
エスケープすればどの位置にあっても文字とするというsedを使っていたのと、
最長一致の正規表現も使っていたので混乱してしまいました。
「直後」を何度も言われていたのに、「直後『だけ』」に思いが至りませんでした。
エスケープすればどの位置にあっても文字とするというsedを使っていたのと、
最長一致の正規表現も使っていたので混乱してしまいました。
「直後」を何度も言われていたのに、「直後『だけ』」に思いが至りませんでした。
2012/10/25(木) 06:00:58.34
gsed で、置換コマンドの s を間違えて a と入力したスクリプトを実行したら、
一行ごとにその行が挿入されていて笑ってしまった。
a コマンドなんて知らなかったわ。
一行ごとにその行が挿入されていて笑ってしまった。
a コマンドなんて知らなかったわ。
2012/10/25(木) 06:04:10.00
笑えんなぁ。
2012/10/25(木) 06:09:46.09
笑って許して♪
2012/10/25(木) 06:45:25.34
gsed って置換するときにタグの数が合ってなくてもエラーが出ないのね。
456名無しさん@お腹いっぱい。
2012/10/25(木) 23:53:29.32 aなんて、edの基本じゃん!
2012/10/27(土) 12:38:13.67
マニュアルでも最初のほうに来ちゃうしね
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
これでは削除できませんでした。
改行を含む文字列を削除する場合どうしたらいいでしょうか?
テキストファイルaaaの中身
<hoge>
abc
</hoge>
<hoge>
def
</hoge>
これを
<hoge>
def
</hoge>
のようにabcのタグだけ削除したい
sed -i "/^<hoge>\n abc\n<\/hoge>/d" aaa
これでは削除できませんでした。
改行を含む文字列を削除する場合どうしたらいいでしょうか?
2012/11/05(月) 10:26:48.87
sedでやるのは無理があるんじゃないか。
2012/11/05(月) 12:39:56.92
>>459
いや、なせば成る
いや、なせば成る
2012/11/05(月) 13:24:25.09
cat aaa | sed -e ':loop; N; N; !b loop; s/^<hoge>\n abc\n<\/hoge>//'
これで良いのかな?
これで良いのかな?
462名無しさん@お腹いっぱい。
2012/11/05(月) 14:31:53.412012/11/05(月) 14:34:20.66
Perl でも Ruby でも何でもいいよ。
464名無しさん@お腹いっぱい。
2012/11/05(月) 14:56:37.972012/11/05(月) 15:19:40.83
grep -n abc して、出てきた数字でsedスクリプト作っちゃうとか。
2012/11/05(月) 15:53:27.99
2012/11/05(月) 21:31:52.30
>>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
sed -n -f hoge.sed <aaa
hoge.sed:
/<hoge>/b hoge
p
b end
:hoge
N
N
/<hoge>\n abc\n<\/hoge>/!p
:end
2012/11/06(火) 04:00:03.51
>>458
aaaがXMLならXMLパーサ(を使える言語)を使った方がいいと思う
/<hoge>/!b
:loop
$b last
/<\/hoge>/!{
N
b loop
}
:last
s/<hoge>[ \n\t]*abc[ \n\t]*\(<\/hoge>\)*//g
aaaがXMLならXMLパーサ(を使える言語)を使った方がいいと思う
/<hoge>/!b
:loop
$b last
/<\/hoge>/!{
N
b loop
}
:last
s/<hoge>[ \n\t]*abc[ \n\t]*\(<\/hoge>\)*//g
2012/11/20(火) 09:09:15.11
すみません。教えて下さい。
テキストの最終行のあとに空白行を1行入れる、というのはどう書くのでしょうか。
iコマンドでは最終行の前に空白行ができてしまいます。
テキストの最終行のあとに空白行を1行入れる、というのはどう書くのでしょうか。
iコマンドでは最終行の前に空白行ができてしまいます。
2012/11/20(火) 09:23:56.98
sed -e '$a\
hoge
'
hoge
'
2012/11/20(火) 09:30:53.76
ありがとう。助かりました。
2012/11/22(木) 01:22:12.85
最終行の後なら
$ cat >> tmp
$
で十分であるようにも思うけどなぁ
$ cat >> tmp
$
で十分であるようにも思うけどなぁ
2012/11/22(木) 03:29:10.92
ああ、なるほど。いつか思い出して使うこともあるでしょう。ありがとう。
2012/11/22(木) 07:19:23.18
>>472
1行追加ならechoの方が楽でね?
1行追加ならechoの方が楽でね?
2012/11/22(木) 11:59:50.11
そうなんだけど、sedファイルの中に書き込みたかったんですよ。でも、ありがと
2013/01/04(金) 10:51:16.73
optimized sed
http://www.commandlinefu.com/commands/view/11707/optimized-sed
巨大ファイル対象の場合は
sed '/foo/ s/foo/foobar/g' <filename>
が
sed 's/foo/foobar/g' <filename>
よりも効率がよいとの事ですが、どういう原理でそうなるんでしょうか
http://www.commandlinefu.com/commands/view/11707/optimized-sed
巨大ファイル対象の場合は
sed '/foo/ s/foo/foobar/g' <filename>
が
sed 's/foo/foobar/g' <filename>
よりも効率がよいとの事ですが、どういう原理でそうなるんでしょうか
2013/01/04(金) 12:52:49.06
"foo"の在る行だけを対象にするから?
どのみち見つけに行くんだから同じじゃん?と想ったり想わなかったり
どのみち見つけに行くんだから同じじゃん?と想ったり想わなかったり
2013/01/04(金) 12:55:13.46
2013/01/05(土) 01:12:15.15
つまり、都市伝説って事か
どのsedかによっても違うんだろう
どのsedかによっても違うんだろう
2013/01/05(土) 09:49:03.44
対象になる行の割合にもよるんじゃないの?
481478
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
$ 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
2013/04/08(月) 00:25:48.59
>type diff
diff is /usr/bin/diff
> type diff | sed 's,[()],,g;s,^[^/][^/]*,,;q'
/usr/bin/diff
s,[()],,g;s,^[^/][^/]*,,;q'
ってどう解釈すれば良いんですか?
diff is /usr/bin/diff
> type diff | sed 's,[()],,g;s,^[^/][^/]*,,;q'
/usr/bin/diff
s,[()],,g;s,^[^/][^/]*,,;q'
ってどう解釈すれば良いんですか?
2013/04/08(月) 05:56:57.86
人それぞれ
で良いんじゃない
で良いんじゃない
2013/05/21(火) 06:44:35.71
Macでgsedを使っています。やりたいこと
★のある行と☆のある行の間にある行のうち、ひらかなを含む行の行頭に@を付ける。
(ひらかなが1文字でも入っていれば良い)
/★/,/☆/{
/[あ-ん]/s/^/@/
}
無視されてしまうんです。助けてください。
★のある行と☆のある行の間にある行のうち、ひらかなを含む行の行頭に@を付ける。
(ひらかなが1文字でも入っていれば良い)
/★/,/☆/{
/[あ-ん]/s/^/@/
}
無視されてしまうんです。助けてください。
485484
2013/05/21(火) 08:34:08.57 [あ-ん]がいけなかったみたいです。[あいうえお(中略)ん、。]でできました。
2013/05/21(火) 13:23:01.78
あ-ん♪
2013/05/21(火) 16:08:58.36
2013/05/22(水) 03:36:42.23
ごめんワカンナイ
2013/05/22(水) 16:53:09.99
ssedって次期GNU sedのこと。
GNUのページでもこの拡張には依存するなって書いてる。
ただ、macでBSD系のsedじゃなくGNU sed使ってるんなら
port依存って意味ではあんまり変わんないんじゃない?
GNUのページでもこの拡張には依存するなって書いてる。
ただ、macでBSD系のsedじゃなくGNU sed使ってるんなら
port依存って意味ではあんまり変わんないんじゃない?
2014/03/04(火) 03:45:38.92
2014/06/03(火) 18:27:21.57
gnuWin32のsed version4.2.1です
sedで、"を入れたくて下記のようにしたのですが、うまくいきません。どうしてでしょうか
sed -e "s/^/ \"/" hoge.txt > hoge2.txt
エスケープの\がうまく利かず、
sed: >を読み込めません
というわけわからんエラーメッセージが出てきます
ちなみに、
sed -e "s/^/ \\/" hoge.txt > hoge2.txt
とかならちゃんと動きます
sedで、"を入れたくて下記のようにしたのですが、うまくいきません。どうしてでしょうか
sed -e "s/^/ \"/" hoge.txt > hoge2.txt
エスケープの\がうまく利かず、
sed: >を読み込めません
というわけわからんエラーメッセージが出てきます
ちなみに、
sed -e "s/^/ \\/" hoge.txt > hoge2.txt
とかならちゃんと動きます
2014/06/28(土) 14:33:09.63
>>491
UNIX板で答えない方が良いのかもしれませんが、適当なスレが無さそうなので
windows のコマンドプロンプトで実行しているとして答えます。
cmd.exe の仕様が原因と思われる
sed -e "s/^/ "^""/" hoge.txt > hoge2.txt
UNIX板で答えない方が良いのかもしれませんが、適当なスレが無さそうなので
windows のコマンドプロンプトで実行しているとして答えます。
cmd.exe の仕様が原因と思われる
sed -e "s/^/ "^""/" hoge.txt > hoge2.txt
2014/06/28(土) 14:56:57.91
sedを使用する際の注意事項があります。
コンピュータのCPUが何ビットであるか調ベておく事が大切です。
32ビットCPUを搭載したコンピュータには、
32ビット用のsedをインストールすること。
64ビットCPUを搭載したコンピュータには、
64ビット用のsedをインストールすること。
これを間違えれば正常にsedが動作しません。
コンピュータのCPUが何ビットであるか調ベておく事が大切です。
32ビットCPUを搭載したコンピュータには、
32ビット用のsedをインストールすること。
64ビットCPUを搭載したコンピュータには、
64ビット用のsedをインストールすること。
これを間違えれば正常にsedが動作しません。
2014/08/20(水) 00:07:25.20
sedの使い方がわからず、試行錯誤しているのですが、うまくいきません。
行の先頭に特定の文字列(たとえば"abc")があったらその行を丸ごと"xxxxxxxxxxx"に置換するにはどうすれば良いでしょうか。
例:
abc123456
が
xxxxxxxxxxx
に変換さえるイメージです。
行の先頭に特定の文字列(たとえば"abc")があったらその行を丸ごと"xxxxxxxxxxx"に置換するにはどうすれば良いでしょうか。
例:
abc123456
が
xxxxxxxxxxx
に変換さえるイメージです。
2014/08/20(水) 01:37:59.80
496名無しさん@お腹いっぱい。
2014/08/20(水) 01:39:49.69 パイプで使うバージョンを書く
|sed 's/^abc.*/xxxxxxxxxxx/'
|sed 's/^abc.*/xxxxxxxxxxx/'
2014/08/20(水) 02:29:51.22
sed '/^abc/cxxxxxxxxxxx'
2014/08/20(水) 03:06:02.58
abc -> xxx
abc123 -> xxxxxx
abc12345 -> xxxxxxxx
をsedでやるならどう書くんだろ
abc123 -> xxxxxx
abc12345 -> xxxxxxxx
をsedでやるならどう書くんだろ
2014/08/20(水) 06:22:02.63
>>498
s/./x/g
s/./x/g
2014/08/20(水) 10:13:13.33
2014/09/17(水) 02:37:37.33
パスワードのゼロ埋め(ゼロパディング)と見た。
502名無しさん@お腹いっぱい。
2014/10/21(火) 08:56:25.00 バックスラッシュって読みやすいか?日本語だと使い道無いし。
プログラミングで正規表現書いてると、
s/\dhoge\sfuga\s/hoge/
↑似たような記号ばっかりで読みづらいw
s/¥dhoge¥sfuga¥s/hoge/
↑こっちのほうが読みやすい
プログラミングで正規表現書いてると、
s/\dhoge\sfuga\s/hoge/
↑似たような記号ばっかりで読みづらいw
s/¥dhoge¥sfuga¥s/hoge/
↑こっちのほうが読みやすい
2014/10/21(火) 10:00:39.43
使い道ある記号だったらエスケープシーケンスにも
円記号ねじ込むにも適さなかっただろうよ
円記号ねじ込むにも適さなかっただろうよ
2014/10/21(火) 11:48:25.80
最近可愛く見えてきた。意味を持たない組み合わせに腹を立てたり。
2014/10/21(火) 13:00:32.47
スラッシュとバックスラッシュが紛らわしいんならスラッシュ以外の
文字を区切りに使えばいいんでないの?
文字を区切りに使えばいいんでないの?
2014/10/21(火) 13:05:36.87
区切りを変更できるのはsコマンドとかの時だけ
507名無しさん@お腹いっぱい。
2014/11/06(木) 07:19:05.882014/11/06(木) 08:27:36.11
>>506 にあるようにできない。
2014/11/06(木) 08:42:54.81
できる実装もあるかもしれない
2014/11/06(木) 09:21:40.14
コピペ改変にかまうな
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 を取得したいのですが、
どう書けば良いのでしょうか?
11 AAA [BBB] CCC/DDD.txt EEE FFF-01
だった場合に、ここから[]内の文字(BBB) を抜き出すために、
sed -e 's/\[//g' -e 's/\]//g' | awk '{ print $3 }'
というスクリプトで BBB を取得しています。
このスクリプトを変更して、DDD を取得したいのですが、
どう書けば良いのでしょうか?
2014/12/23(火) 19:23:47.26
s,.*/,,; s,\.txt.*,,
2014/12/24(水) 15:41:51.14
ありがとう
2014/12/28(日) 06:55:35.52
>>507
1,\@hoge@
linuxで確認済み
検索でここにたどり着いた人の為と、何処のコピペか検索してもそれらしいものが出なかったので、貼っておきます
POSIX
sed
http://pubs.opengroup.org/onlinepubs/9699919799/utilities/sed.html
In a context address, the construction "\cBREc", where c is any character other than <backslash> or <newline>, shall be identical to "/BRE/".
If the character designated by c appears following a <backslash>, then it shall be considered to be that literal character,
which shall not terminate the BRE. For example, in the context address "\xabc\xdefx", the second x stands for itself,
so that the BRE is "abcxdef".
BSD
On-line Manual of "sed"
http://www.jp.freebsd.org/cgi/mroff.cgi?subdir=man&;lc=1&cmd=&man=sed&dir=jpman-5.4.0%2Fman§=0
1. コンテキストアドレスにおいて、バックスラッシュ (``\'') と改行以外の 文字を正規表現の区切りとして用いることできます。
区切り文字の直前に バックスラッシュを置くことで、区切り文字をリテラルに解釈させることが できます。
たとえば、コンテキストアドレス \xabc\xdefx において、区切 り文字は ``x'' で、2つめの ``x'' は ``x'' という文字を表します。
よっ て、正規表現は ``abcxdef'' と解釈されます。
LINUX
Man page of SED
http://linuxjm.sourceforge.jp/html/GNU_sed/man1/sed.1.html
/regexp/
正規表現 regexp にマッチした行にマッチする。
\cregexpc
正規表現 regexp にマッチした行にマッチする。c には任意の文字を指定できる。
1,\@hoge@
linuxで確認済み
検索でここにたどり着いた人の為と、何処のコピペか検索してもそれらしいものが出なかったので、貼っておきます
POSIX
sed
http://pubs.opengroup.org/onlinepubs/9699919799/utilities/sed.html
In a context address, the construction "\cBREc", where c is any character other than <backslash> or <newline>, shall be identical to "/BRE/".
If the character designated by c appears following a <backslash>, then it shall be considered to be that literal character,
which shall not terminate the BRE. For example, in the context address "\xabc\xdefx", the second x stands for itself,
so that the BRE is "abcxdef".
BSD
On-line Manual of "sed"
http://www.jp.freebsd.org/cgi/mroff.cgi?subdir=man&;lc=1&cmd=&man=sed&dir=jpman-5.4.0%2Fman§=0
1. コンテキストアドレスにおいて、バックスラッシュ (``\'') と改行以外の 文字を正規表現の区切りとして用いることできます。
区切り文字の直前に バックスラッシュを置くことで、区切り文字をリテラルに解釈させることが できます。
たとえば、コンテキストアドレス \xabc\xdefx において、区切 り文字は ``x'' で、2つめの ``x'' は ``x'' という文字を表します。
よっ て、正規表現は ``abcxdef'' と解釈されます。
LINUX
Man page of SED
http://linuxjm.sourceforge.jp/html/GNU_sed/man1/sed.1.html
/regexp/
正規表現 regexp にマッチした行にマッチする。
\cregexpc
正規表現 regexp にマッチした行にマッチする。c には任意の文字を指定できる。
2014/12/28(日) 17:04:08.20
おおお、グレート義太夫
2016/02/10(水) 23:22:09.08
どうにも理解が出来ず教えて欲しいのですが
http://sed.sourceforge.net/sed1line.txt
から
# print paragraph if it contains AAA (blank lines separate paragraphs)
sed -e '/./{H;$!d;}' -e 'x;/AAA/!d;'
これがどうにもわかりません。
H;$!d;の$!dが何故必要なのか?
動作の流れを教えて頂けないでしょうか?
http://sed.sourceforge.net/sed1line.txt
から
# print paragraph if it contains AAA (blank lines separate paragraphs)
sed -e '/./{H;$!d;}' -e 'x;/AAA/!d;'
これがどうにもわかりません。
H;$!d;の$!dが何故必要なのか?
動作の流れを教えて頂けないでしょうか?
517516
2016/02/21(日) 00:09:27.85 age
2016/02/21(日) 01:34:16.62
タダで教えろって?
2016/02/21(日) 10:27:51.16
dがあるのは段落の区切りまで何も出力させないため
ファイル末尾も段落の区切りだから$!が要る
ファイル末尾に必ず空行があるなら$!は要らない
dでそのサイクルが終了することは知ってますね?
ファイル末尾も段落の区切りだから$!が要る
ファイル末尾に必ず空行があるなら$!は要らない
dでそのサイクルが終了することは知ってますね?
2016/02/21(日) 10:54:53.96
10日も呆けーと待ってたことに驚き
2016/02/21(日) 13:02:47.07
でも教えてもらえたじゃないかw
2016/02/21(日) 14:02:51.01
自分で試せば小一時間で気付くのに、と思う
523516
2016/02/21(日) 16:55:28.79 >>519
有り難うございます。助かりました。
!dをpの様に認識してしまっていて次のサイクルに移行させる
イメージがなく、$!dを最終行を表示させるとしか思ってなくて
色々試してもどうにも腑に落ちないもので質問させて頂きました。
有り難うございます。助かりました。
!dをpの様に認識してしまっていて次のサイクルに移行させる
イメージがなく、$!dを最終行を表示させるとしか思ってなくて
色々試してもどうにも腑に落ちないもので質問させて頂きました。
524名無しさん@お腹いっぱい。
2016/04/28(木) 22:19:31.31 sedで桁そろえってどうしたらいいですかる
具体的にはls -l で出てきた結果のうち、ファイル名を最初に左揃え、ファイルサイズを右揃えで出力したいのですが、
sedコマンドだけで可能ですか?
具体的にはls -l で出てきた結果のうち、ファイル名を最初に左揃え、ファイルサイズを右揃えで出力したいのですが、
sedコマンドだけで可能ですか?
2016/04/29(金) 06:51:34.85
そういうのは awk で。
526名無しさん@お腹いっぱい。
2016/04/29(金) 07:15:23.81 どうしてもsedだけでやたいんです!
お願いします!
お願いします!
2016/04/29(金) 07:58:13.44
UNIX哲学に戻るんだ。
1つのことをうまくやる、ものを組み合わせればいいんだから、まずはawkでやってみる。
1つのことをうまくやる、ものを組み合わせればいいんだから、まずはawkでやってみる。
2016/04/29(金) 08:26:18.75
awkでもいいが、シェル内部コマンドだけでもできるぞ。
ls -l | while read m l u g s t1 t2 t3 f
do
printf
ls -l | while read m l u g s t1 t2 t3 f
do
printf
2016/04/29(金) 08:29:01.55
ありゃ? 記号があると書き込みが切れる。記号を全角にした。半角に直して読んでね。
ls -l | while read m l u g s t1 t2 t3 f
do
printf ”%-20s %8d %s\n” ”$f” ”$s”
done
ls -l | while read m l u g s t1 t2 t3 f
do
printf ”%-20s %8d %s\n” ”$f” ”$s”
done
2016/04/29(金) 09:51:04.97
FreeBSD$ stat -f %-20N%8z *
Linux$ stat -c %-20n%8s *
Linux$ stat -c %-20n%8s *
2016/04/29(金) 10:02:30.45
sedでの右揃えは、一旦中身のみを切り出してから左側に余分なスペースを加えてから
右から文字数固定で切り取る。
左揃えはその逆。
右から文字数固定で切り取る。
左揃えはその逆。
2016/08/11(木) 22:51:26.97
>>144の更新 NetBSDとOpenBSDの標準sedで-iが導入。
入力ファイルを書き換えるには?
・-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 オプションが取り入れられたのは 7.0 でそれ以前には無い。
OpenBSDのの標準 sed に -i オプションが取り入れられたのは 5.8 でそれ以前には無い。
MacOSX の 標準 sed は FreeBSD 由来なので元になるバージョンに依存する。
MacOSX 10.3以降は FreeBSD 5.1R由来なので、 -iオプションはある。
以前のGNU sed には in-place editing 機能はない (Changelog によると 2001-09-25 ) (3.02には in place オプションは無い)
入力ファイルを書き換えるには?
・-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 オプションが取り入れられたのは 7.0 でそれ以前には無い。
OpenBSDのの標準 sed に -i オプションが取り入れられたのは 5.8 でそれ以前には無い。
MacOSX の 標準 sed は FreeBSD 由来なので元になるバージョンに依存する。
MacOSX 10.3以降は FreeBSD 5.1R由来なので、 -iオプションはある。
以前のGNU sed には in-place editing 機能はない (Changelog によると 2001-09-25 ) (3.02には in place オプションは無い)
2017/03/17(金) 14:26:32.28
データハンドリングとしては、
入力ファイルをコピーして更新をかける
更新処理が終わったら、入力ファイルを削除して更新ファイルをりネームして入力ファイルとする
みたいな方法で必要十分。
なんでもかんでもツールで処理するのではなく、OSが得意な機能はOSのものを使う。
クラッシュがいつ起こってもデータが確保できるのは、そういう、むしろドンくさい方法。
お遊びならいざしらず、仕事では安全確実性が少しでも高い方を選ぶのがプロ。
無論、履歴から復元なんてのも、データによっては必要だが、
処理が複雑になれば、一般的にトラブルも増える。
どこまで何をやるかは、ひとえにそのデータの重要性にかかっている。
バックアップから戻してもたいした事がないなら、何やってもいいだろう。
入力ファイルをコピーして更新をかける
更新処理が終わったら、入力ファイルを削除して更新ファイルをりネームして入力ファイルとする
みたいな方法で必要十分。
なんでもかんでもツールで処理するのではなく、OSが得意な機能はOSのものを使う。
クラッシュがいつ起こってもデータが確保できるのは、そういう、むしろドンくさい方法。
お遊びならいざしらず、仕事では安全確実性が少しでも高い方を選ぶのがプロ。
無論、履歴から復元なんてのも、データによっては必要だが、
処理が複雑になれば、一般的にトラブルも増える。
どこまで何をやるかは、ひとえにそのデータの重要性にかかっている。
バックアップから戻してもたいした事がないなら、何やってもいいだろう。
2017/10/22(日) 14:32:07.16
2017/10/22(日) 15:59:51.51
昔も今もTeXでやってくれる印刷屋に頼めばいいじゃん。
2017/12/08(金) 20:25:27.67
今も昔も餅屋のふりした餅屋はたくさんあるからな~。餅の見る目のない会社だったってことで。
537名無しさん@お腹いっぱい。
2017/12/29(金) 10:21:45.77 誰でも簡単にパソコン1台で稼げる方法など
参考までに、
⇒ 『宮本のゴウリエセレレ』 というブログで見ることができるらしいです。
グーグル検索⇒『宮本のゴウリエセレレ』
8DL33JQ0HX
参考までに、
⇒ 『宮本のゴウリエセレレ』 というブログで見ることができるらしいです。
グーグル検索⇒『宮本のゴウリエセレレ』
8DL33JQ0HX
2018/01/18(木) 12:08:00.54
https://mevius.5ch.net/test/read.cgi/unix/1489979246/l50
ここから来ました。
sedでiフラグとdフラグを両方立てることってできないのでしょうか。
$ cat file
aaa
AAA
$ cat file | sed -e '/aaa/id'
AAA
d
aaa
ここから来ました。
sedでiフラグとdフラグを両方立てることってできないのでしょうか。
$ cat file
aaa
AAA
$ cat file | sed -e '/aaa/id'
AAA
d
aaa
2018/01/18(木) 12:57:27.52
頑張って /[Aa]\{3\}/d と書く
今時の正規表現修飾子とか使えるsedがあるなら俺も知りたい
今時の正規表現修飾子とか使えるsedがあるなら俺も知りたい
540538
2018/01/18(木) 13:11:30.41 >>539
ありがとうございます。とりあえずその路線で行きます。
素人目にはiフラグとdフラグを同時に使えないというのは極めて不自然というか
非対称な気もしますが……
二つの役割は直交関係にあって,別に依存・背反はないと思うんですよねぇ。
ありがとうございます。とりあえずその路線で行きます。
素人目にはiフラグとdフラグを同時に使えないというのは極めて不自然というか
非対称な気もしますが……
二つの役割は直交関係にあって,別に依存・背反はないと思うんですよねぇ。
2018/01/18(木) 16:19:03.70
GNU sedなら I 大文字が使えるじゃあないか
542538
2018/01/18(木) 16:43:03.48 $ printf '%s\n%s\n%s\n' 'AAA' 'Bbb' 'aaa' | gsed -e '/a/Id'
Bbb
おおおおおお!ありがとうございます。Iフラグは知りませんでした!
しかしこれ GNU の独自拡張なんですよねぇ……欲を言えばPOSIX標準に従いたかったんです……
すいません。とりあえず>>539の一文字づつ手動で置き換えるというやりかたで通します。
そして今気付いたんですが iという文字はフラグだけでなくて「行挿入」というコマンドとしての
解釈もあるんですね。だから「id」でdが当該箇所に挿入された形になったんですね。
馬鹿だなぁ俺
Bbb
おおおおおお!ありがとうございます。Iフラグは知りませんでした!
しかしこれ GNU の独自拡張なんですよねぇ……欲を言えばPOSIX標準に従いたかったんです……
すいません。とりあえず>>539の一文字づつ手動で置き換えるというやりかたで通します。
そして今気付いたんですが iという文字はフラグだけでなくて「行挿入」というコマンドとしての
解釈もあるんですね。だから「id」でdが当該箇所に挿入された形になったんですね。
馬鹿だなぁ俺
2018/01/19(金) 06:11:37.28
iもdもコマンドじゃないの?
544542
2018/01/19(金) 16:10:54.99 >>543
あーその通りですわ。
逆になぜ id で大文字小文字を無視して削除ができると思ったのか疑問なくらい阿呆でした……。
精進し直します。
# 素人考えで言うと「大文字小文字を無視して検索→その行でコマンド実行」なんて頻繁に実行するだろうに
それに対応した機能が (POSIXの範囲で) 存在しないってのはちょっと頂けないですねぇ……
# 尤も上級者の方々は他の,もっと優美な方法を採ってらっしゃるのかも知れませんが。
あーその通りですわ。
逆になぜ id で大文字小文字を無視して削除ができると思ったのか疑問なくらい阿呆でした……。
精進し直します。
# 素人考えで言うと「大文字小文字を無視して検索→その行でコマンド実行」なんて頻繁に実行するだろうに
それに対応した機能が (POSIXの範囲で) 存在しないってのはちょっと頂けないですねぇ……
# 尤も上級者の方々は他の,もっと優美な方法を採ってらっしゃるのかも知れませんが。
2018/02/03(土) 04:17:58.88
ある文字がある回数続く*行*を置換することってできないんでしょうか。
...
xbcea
aaa
aaa
aaa
dkjef
...
↑このようなファイルで、
cat ./file | sed -e 's/aaa\naaa\naaa/bbb/g'
とやることで
...
xbcea
bbb
dkjef
...
このような出力が得られることを望んでいるのですが、上記のコマンドでは無理でした。> <
ご教授願いますm(_ _)m
...
xbcea
aaa
aaa
aaa
dkjef
...
↑このようなファイルで、
cat ./file | sed -e 's/aaa\naaa\naaa/bbb/g'
とやることで
...
xbcea
bbb
dkjef
...
このような出力が得られることを望んでいるのですが、上記のコマンドでは無理でした。> <
ご教授願いますm(_ _)m
2018/02/03(土) 04:47:53.50
printf "xbcea\naaa\naaa\naaa\ndkjef\n" | sed '/aaa/{H;d;};/aaa/!{x;/^$/d;s/aaa\naaa\naaa/bbb/p;x;}'
汚いw
汚いw
2018/02/14(水) 10:22:09.93
☆ 日本の、改憲をしましょう。現在、衆議員と参議院の両院で、
改憲議員が3分の2を超えております。『憲法改正国民投票法』、
でググってみてください。国会の発議はすでに可能です。
平和は勝ち取るものです。お願い致します。☆☆
改憲議員が3分の2を超えております。『憲法改正国民投票法』、
でググってみてください。国会の発議はすでに可能です。
平和は勝ち取るものです。お願い致します。☆☆
548名無しさん@お腹いっぱい。
2018/05/22(火) 03:04:16.83 知り合いから教えてもらったパソコン一台でお金持ちになれるやり方
時間がある方はみてもいいかもしれません
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』
9M87D
時間がある方はみてもいいかもしれません
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』
9M87D
2018/08/28(火) 06:46:05.19
sedとawkとgrepの違いって?
550名無しさん@お腹いっぱい。
2018/08/31(金) 10:07:25.21 sedはストリームエディタ
grepは文字列検索
awkはスクリプト言語
grepは文字列検索
awkはスクリプト言語
レスを投稿する
ニュース
- 「それでも、お米は高いと感じますか?」JA広告に批判殺到 コメ価格18週ぶり下落も、わずか19円…備蓄米の流通システムに潜む課題 [ぐれ★]
- 反撃の中居正広、一世一代の大勝負へ 元フジ女性アナとは「合意の上での性行為だった」と認識 ★16 [Ailuropoda melanoleuca★]
- 【埼玉】「大丈夫、と言ったのでその場から離れた」 男児4人重軽傷のひき逃げ事件で車を運転していた42歳の中国籍の男逮捕 三郷市 [ぐれ★]
- 機動戦士ガンダム最新作『GQuuuuuuX(ジークアクス)』乃木坂46ネタで炎上 監督の鶴巻和哉氏は乃木坂ファン ★5 [Anonymous★]
- 突出して低い日本女性の賃金 経済の停滞や少子化にも影響 ★2 [ぐれ★]
- 反撃の中居正広、一世一代の大勝負へ 元フジ女性アナとは「合意の上での性行為だった」と認識 ★17 [Ailuropoda melanoleuca★]
- 【速報】石破内閣支持率さん、22%と過去最低を無事更新!!毎日新聞 [597533159]
- 永野芽郁、芸能界追放 [918862327]
- 【朗報】愛国者、AIを駆使して朝日新聞のデマを暴く [972432215]
- 👊🥺ゆめちゃんは出入り禁止のお🏡✨
- 【閲覧注意】万博の木製リング、大量の虫が沸いて巣になってしまう [487816701]
- 【悲報】アマプラ、広告出るようになってユーザーが大激怒してしまうwwwwwwww [339035499]