X



sed
0001名無しさん@お腹いっぱい。
垢版 |
NGNG
sedスレッド
0439名無しさん@お腹いっぱい。
垢版 |
2012/08/07(火) 22:00:53.40
>>437
多分やりたいのはそれだと思います。
具体的に同書けばいいのでしょう?
0440名無しさん@お腹いっぱい。
垢版 |
2012/08/08(水) 02:01:32.99
もうawkかなにかで済ましてるだろうけど練習
437とは違うやり方になった
sed -n -e '
:loop
/^\n*$/{
N
b loop
}
p
'
0442名無しさん@お腹いっぱい。
垢版 |
2012/08/17(金) 16:05:21.04
gsedですが、
ブラケット開きがあって、ブラケット閉じ以外のものが1つ以上あって、ブラケット閉じがある場合、
で、これどこがおかしいのでしょうか? ★☆が現れてくれないんですけど。
s/\[\([^\]][^\]]*\)]/[★\1☆]/g
0444名無しさん@お腹いっぱい。
垢版 |
2012/08/17(金) 16:43:13.83
ありがとうございます。
つまり、[ と ] の間にあるものはどんなものでも
「これは文字です」と宣言しなくてもいい(\が要らない)ということですか。
やってみます。ありがとうございました。
0446名無しさん@お腹いっぱい。
垢版 |
2012/08/17(金) 18:35:40.56
テキスト   [aaa], [bbb] <あああ>の(アアア)と<いいい>の(イイイ)
欲しい結果 ★aaa☆, ★bbb☆ ★あああ☆の★アアア☆と★いいい☆の★イイイ☆
s/[<[(]\([^<>[]()][^<>[]()]*\)[>])]/★\1☆/g
予想はしたけど、まるで反応してくれません。
半角の約物3種類は欲張ったかなあ、と1つずつやってみているところです。
0447名無しさん@お腹いっぱい。
垢版 |
2012/08/17(金) 18:37:54.56
>>446
>>445 に書いてあること読めよ。

[^ の直後に ] を置かないと、普通の文字としては認識されないんだよ。
[^....] の中の .... の順番を変えろということ。
0448名無しさん@お腹いっぱい。
垢版 |
2012/08/17(金) 18:41:47.66
>>446
s/[[<(]\([^]<>()][^]<>()]*\)[]>)]/★\1☆/g
0451名無しさん@お腹いっぱい。
垢版 |
2012/08/20(月) 16:08:01.31
ごめんなさい。>>446は[]の中の[]に全部\を付けたつもりでした(このミスが大元ですね)

エスケープすればどの位置にあっても文字とするというsedを使っていたのと、
最長一致の正規表現も使っていたので混乱してしまいました。
「直後」を何度も言われていたのに、「直後『だけ』」に思いが至りませんでした。
0452名無しさん@お腹いっぱい。
垢版 |
2012/10/25(木) 06:00:58.34
gsed で、置換コマンドの s を間違えて a と入力したスクリプトを実行したら、
一行ごとにその行が挿入されていて笑ってしまった。
a コマンドなんて知らなかったわ。
0456名無しさん@お腹いっぱい。
垢版 |
2012/10/25(木) 23:53:29.32
aなんて、edの基本じゃん!
0458名無しさん@お腹いっぱい。
垢版 |
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

これでは削除できませんでした。
改行を含む文字列を削除する場合どうしたらいいでしょうか?
0462名無しさん@お腹いっぱい。
垢版 |
2012/11/05(月) 14:31:53.41
>>459-461
ありがとうございます
しかし削除できませんでした
ちなみにsedじゃなくて何でやったほうがいいでしょうか?
0464名無しさん@お腹いっぱい。
垢版 |
2012/11/05(月) 14:56:37.97
>>463
はい。ありがとうございます。できればシェルスクリプトで書きたいので
PerlでもRubyでも何でもいいとは思いますがそれ以外でいいコマンドはありませんでしょうか?
0468名無しさん@お腹いっぱい。
垢版 |
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
0469名無しさん@お腹いっぱい。
垢版 |
2012/11/20(火) 09:09:15.11
すみません。教えて下さい。
テキストの最終行のあとに空白行を1行入れる、というのはどう書くのでしょうか。
iコマンドでは最終行の前に空白行ができてしまいます。
0477名無しさん@お腹いっぱい。
垢版 |
2013/01/04(金) 12:52:49.06
"foo"の在る行だけを対象にするから?
どのみち見つけに行くんだから同じじゃん?と想ったり想わなかったり
0481478
垢版 |
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
0482名無しさん@お腹いっぱい。
垢版 |
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'
ってどう解釈すれば良いんですか?
0484名無しさん@お腹いっぱい。
垢版 |
2013/05/21(火) 06:44:35.71
Macでgsedを使っています。やりたいこと
★のある行と☆のある行の間にある行のうち、ひらかなを含む行の行頭に@を付ける。
(ひらかなが1文字でも入っていれば良い)

/★/,/☆/{
/[あ-ん]/s/^/@/
}

無視されてしまうんです。助けてください。
0485484
垢版 |
2013/05/21(火) 08:34:08.57
[あ-ん]がいけなかったみたいです。[あいうえお(中略)ん、。]でできました。
0489名無しさん@お腹いっぱい。
垢版 |
2013/05/22(水) 16:53:09.99
ssedって次期GNU sedのこと。
GNUのページでもこの拡張には依存するなって書いてる。
ただ、macでBSD系のsedじゃなくGNU sed使ってるんなら
port依存って意味ではあんまり変わんないんじゃない?
0491名無しさん@お腹いっぱい。
垢版 |
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

とかならちゃんと動きます
0492名無しさん@お腹いっぱい。
垢版 |
2014/06/28(土) 14:33:09.63
>>491
UNIX板で答えない方が良いのかもしれませんが、適当なスレが無さそうなので
windows のコマンドプロンプトで実行しているとして答えます。

cmd.exe の仕様が原因と思われる
sed -e "s/^/ "^""/" hoge.txt > hoge2.txt
0493名無しさん@お腹いっぱい。
垢版 |
2014/06/28(土) 14:56:57.91
sedを使用する際の注意事項があります。
コンピュータのCPUが何ビットであるか調ベておく事が大切です。

32ビットCPUを搭載したコンピュータには、
32ビット用のsedをインストールすること。

64ビットCPUを搭載したコンピュータには、
64ビット用のsedをインストールすること。

これを間違えれば正常にsedが動作しません。
0494名無しさん@お腹いっぱい。
垢版 |
2014/08/20(水) 00:07:25.20
sedの使い方がわからず、試行錯誤しているのですが、うまくいきません。
行の先頭に特定の文字列(たとえば"abc")があったらその行を丸ごと"xxxxxxxxxxx"に置換するにはどうすれば良いでしょうか。

例:
abc123456

xxxxxxxxxxx
に変換さえるイメージです。
0496名無しさん@お腹いっぱい。
垢版 |
2014/08/20(水) 01:39:49.69
パイプで使うバージョンを書く
|sed 's/^abc.*/xxxxxxxxxxx/'
0502名無しさん@お腹いっぱい。
垢版 |
2014/10/21(火) 08:56:25.00
バックスラッシュって読みやすいか?日本語だと使い道無いし。

プログラミングで正規表現書いてると、
s/\dhoge\sfuga\s/hoge/
↑似たような記号ばっかりで読みづらいw

s/¥dhoge¥sfuga¥s/hoge/
↑こっちのほうが読みやすい
0505名無しさん@お腹いっぱい。
垢版 |
2014/10/21(火) 13:00:32.47
スラッシュとバックスラッシュが紛らわしいんならスラッシュ以外の
文字を区切りに使えばいいんでないの?
0507名無しさん@お腹いっぱい。
垢版 |
2014/11/06(木) 07:19:05.88
1,/hoge/ のようにaddressに正規表現を使う時のスラッシュを
他の記号に変えることはできますか?
s@http://@https://@ のようなことをしたいのです
0511名無しさん@お腹いっぱい。
垢版 |
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 を取得したいのですが、
どう書けば良いのでしょうか?
0514名無しさん@お腹いっぱい。
垢版 |
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&sect=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 には任意の文字を指定できる。
0516名無しさん@お腹いっぱい。
垢版 |
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が何故必要なのか?
動作の流れを教えて頂けないでしょうか?
0517516
垢版 |
2016/02/21(日) 00:09:27.85
age
0519名無しさん@お腹いっぱい。
垢版 |
2016/02/21(日) 10:27:51.16
dがあるのは段落の区切りまで何も出力させないため

ファイル末尾も段落の区切りだから$!が要る
ファイル末尾に必ず空行があるなら$!は要らない

dでそのサイクルが終了することは知ってますね?
0523516
垢版 |
2016/02/21(日) 16:55:28.79
>>519
有り難うございます。助かりました。
!dをpの様に認識してしまっていて次のサイクルに移行させる
イメージがなく、$!dを最終行を表示させるとしか思ってなくて
色々試してもどうにも腑に落ちないもので質問させて頂きました。
0524名無しさん@お腹いっぱい。
垢版 |
2016/04/28(木) 22:19:31.31
sedで桁そろえってどうしたらいいですかる
具体的にはls -l で出てきた結果のうち、ファイル名を最初に左揃え、ファイルサイズを右揃えで出力したいのですが、
sedコマンドだけで可能ですか?
0526名無しさん@お腹いっぱい。
垢版 |
2016/04/29(金) 07:15:23.81
どうしてもsedだけでやたいんです!
お願いします!
0527名無しさん@お腹いっぱい。
垢版 |
2016/04/29(金) 07:58:13.44
UNIX哲学に戻るんだ。
1つのことをうまくやる、ものを組み合わせればいいんだから、まずはawkでやってみる。
0529名無しさん@お腹いっぱい。
垢版 |
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
0531名無しさん@お腹いっぱい。
垢版 |
2016/04/29(金) 10:02:30.45
sedでの右揃えは、一旦中身のみを切り出してから左側に余分なスペースを加えてから
右から文字数固定で切り取る。
左揃えはその逆。
0532名無しさん@お腹いっぱい。
垢版 |
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 オプションは無い)
0533名無しさん@お腹いっぱい。
垢版 |
2017/03/17(金) 14:26:32.28
データハンドリングとしては、
入力ファイルをコピーして更新をかける
更新処理が終わったら、入力ファイルを削除して更新ファイルをりネームして入力ファイルとする
みたいな方法で必要十分。
なんでもかんでもツールで処理するのではなく、OSが得意な機能はOSのものを使う。
クラッシュがいつ起こってもデータが確保できるのは、そういう、むしろドンくさい方法。
お遊びならいざしらず、仕事では安全確実性が少しでも高い方を選ぶのがプロ。

無論、履歴から復元なんてのも、データによっては必要だが、
処理が複雑になれば、一般的にトラブルも増える。
どこまで何をやるかは、ひとえにそのデータの重要性にかかっている。
バックアップから戻してもたいした事がないなら、何やってもいいだろう。
0537名無しさん@お腹いっぱい。
垢版 |
2017/12/29(金) 10:21:45.77
誰でも簡単にパソコン1台で稼げる方法など
参考までに、
⇒ 『宮本のゴウリエセレレ』 というブログで見ることができるらしいです。

グーグル検索⇒『宮本のゴウリエセレレ』

8DL33JQ0HX
レスを投稿する


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