シェルスクリプト総合 その23

このエントリーをはてなブックマークに追加
1名無しさん@お腹いっぱい。
シェルスクリプトの総合スレです。
□お約束
・特記なき場合はBourne Shell(/bin/sh)がデフォルトです。
 bash/zsh/ksh/ashなどに依存する場合は明示しましょう。
 Linuxユーザは/bin/shの正体がbashまたはdashなので特に注意。
 FreeBSDユーザは/bin/shの正体がashなので注意。
 v7 shに一番近くて、現役のshは、OpenSolaris由来のheirloom sh。
  http://src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/cmd/sh/
  http://heirloom.sourceforge.net/sh.html
・csh/tcshのシェルスクリプトは推奨されません。
 (理由は「csh-whynot」でググれ)
・UNIXにはシェルスクリプトに便利な小さなコマンドがいろいろあります。
 manや参考リンクを見ましょう。
 aproposないしはman -kでそれらしい単語による簡単な検索もできます。
・シェルで使えるワイルドカード等は正規表現ではありません。
 正規表現の話題はスレ違い(正規表現スレへ)
・シェルスクリプトのことをシェルってゆーな
□初心者へのアドバイス:
・適した道具を判断するのも頭の重要な使い方。シェルスクリプトよりも
 awkまたはperlの方が適した処理にはそちらを使いましょう。
・知らないコマンドが出てきたらmanを引きましょう。
・思い通りに動かないときは、まずは sh -x でトレースしましょう。
□回答者への注意事項:
・シェルスクリプトでの処理方法を質問しているのに、よくわからずに
 「そういうのはperl使いましょう」と回答するのはやめましょう。
 安易にperlに逃げずにシェルスクリプトで処理するのが頭のいいやり方。
前スレ
シェルスクリプト総合 その22
http://peace.2ch.net/test/read.cgi/unix/1383260330/
2名無しさん@お腹いっぱい。:2014/07/01(火) 18:00:07.04
すみませんがシェルに詳しい方のみ回答をお願いします
3名無しさん@お腹いっぱい。:2014/07/01(火) 18:10:58.47
・シェルスクリプトのことをシェルってゆーな
4名無しさん@お腹いっぱい。:2014/07/01(火) 18:11:47.16
シャロスクリプトまだー?
5名無しさん@お腹いっぱい。:2014/07/01(火) 18:12:25.94
その22 をそのままコピペしましたが

その16にあったもの
□関連スレ:
□初心者向けリンク:
□入門者向け書籍:
□参考リンク:
□最近のシェルスクリプト本:
□関連書籍と関連リンク:
□人間初心者へのお願い:
□シェルスクリプトでよく使うコマンド:
です。

今、追加案あればどうぞ
6名無しさん@お腹いっぱい。:2014/07/01(火) 18:17:49.67
>>4
そんなのないよ
7名無しさん@お腹いっぱい。:2014/07/01(火) 18:19:36.60
>>1
>  安易にperlに逃げずにシェルスクリプトで処理するのが頭のいいやり方。
便利なものはどんどん使う方が頭いいと思うがなぁ。
8名無しさん@お腹いっぱい。:2014/07/01(火) 18:21:16.64
このスレは純正シェル道の求道者達が集う道場スレです。
うかつに部外者が踏み込むとケガをする場合があるのでご注意ください。
9名無しさん@お腹いっぱい。:2014/07/01(火) 18:58:07.03
知らんがな
10名無しさん@お腹いっぱい。:2014/07/01(火) 18:58:36.74
忘れてた
>>1たて乙
11名無しさん@お腹いっぱい。:2014/07/01(火) 20:10:01.64
昨今の*nixなら某かの方法でbashは入手できるよね
純性UNIXはkshを愛してるみたいだけど時代の要請を理解してる
12名無しさん@お腹いっぱい。:2014/07/01(火) 20:36:19.70
別にbash限定のシェルスクリプト書いていけないわけではない
恥ずかしながらbashでしか動きません、と注釈付けてあれば
文句いう人は少ない
13名無しさん@お腹いっぱい。:2014/07/01(火) 20:49:55.31
なら1行目で最初から解決してるんだね。よかったよかった
14名無しさん@お腹いっぱい。:2014/07/01(火) 22:04:49.49
bashをログインシェルにしてる奴の作ったプログラムは全部GPLが感染するよ。
15名無しさん@お腹いっぱい。:2014/07/01(火) 22:16:40.24
さあー、盛り上がってきたよ!
じゃんじゃん自分の意見を書いていこう!

ポータブル派保守系、時代はbash派革新系
シェルスクリプトに無理にこだわらない現実派

テンプレの募集もしていますよ
その17、その18で消えたようだから、その16、その17を元に話しましょう
16名無しさん@お腹いっぱい。:2014/07/01(火) 22:20:53.98
ややこしい操作するなら安易にperlでやる派
17名無しさん@お腹いっぱい。:2014/07/01(火) 22:46:24.84
>>11
組み込みとかメモリが足りなかったら入れられないんじゃないかな。
PCでも何千とか起動すると重そう。
18名無しさん@お腹いっぱい。:2014/07/02(水) 00:13:16.98
そういう特殊な環境の話はしてないっしょ。
19名無しさん@お腹いっぱい。:2014/07/02(水) 00:29:19.31
>>7
誰もメンテできなくなったVBやCOBOLやExcelの
資産()を見てもそう思えるんなら、才能ないから
コンピュータから手を引いたほうがいい。
20名無しさん@お腹いっぱい。:2014/07/02(水) 00:48:45.98
bash を使うなとは言わんけど、bash でしか動かんものは
#! 行でそうと宣言しておいてほしい。
つーか、#!/bin/sh と書かれていたら
bash の独自拡張はぜんぶエラーにしてほしいんだが。
man によると sh という名前で起動されると POSIX 互換モードになるらしいけど、
あいかわらず bash 拡張がふつーに使えて違いがさっぱりわからん。
21名無しさん@お腹いっぱい。:2014/07/02(水) 00:59:50.16
trapとセットでよく使うmktempとか結構システムによって挙動ちがうけど、純粋シェル道的にはどうやって実装するの?
22名無しさん@お腹いっぱい。:2014/07/02(水) 04:30:46.92
>>20
ここに書けばエラーレスが出るよ。
23名無しさん@お腹いっぱい。:2014/07/02(水) 05:59:05.00
>>20
bash で #!/bin/sh と書いたら、プロセス置換 <(command) とかが使えなくなるという違いはある。
24名無しさん@お腹いっぱい。:2014/07/02(水) 15:49:33.90
>>20
Bourne Shellを自分で入れるのが一番良いかもね
25名無しさん@お腹いっぱい。:2014/07/03(木) 15:20:26.48
>>20
例えばLinuxのDebian系ディストリだと
そのために拡張控えめな dash (Debian版ash) があったりするね
26名無しさん@お腹いっぱい。:2014/07/03(木) 15:31:45.75
同じbashでも、#!/bin/shと書いて起動するとその動作モードが変わるという話をしてるんだけどね。
zshでも動作は変わる。が、ash(dash)は#!/bin/shと書いても#!/bin/ashと書いても何も変わらない。
27名無しさん@お腹いっぱい。:2014/07/03(木) 15:47:52.68
>>20>>26
たぶんPOSIX準拠でエラーのないスクリプトが正常動作する程度の機能なんだろう。
最低限それやっとかないとPOSIX準拠のシェルとして採用してもらえなくなるから。

厳密にPOSIX準拠で拡張ゼロのシェルを内部に別途実装するとか無駄だから、
そういう要望はBourne Shell入れてそっちでやってくれってスタンスなんじゃね?
28名無しさん@お腹いっぱい。:2014/07/03(木) 16:06:37.72
今後新しいシェルが出てきて乗り換えた時に、書き溜めたスクリプトが動くと嬉しいので、互換性指摘は嬉しい。
ただ、その時々によって必要性が違うので無視するかも。
つまり、互換性指摘はWarningということだ。
29名無しさん@お腹いっぱい。:2014/07/03(木) 16:34:16.07
シェルスクリプトってインタプリタ言語だしWarning出さずにError出すイメージ
30名無しさん@お腹いっぱい。:2014/07/03(木) 16:45:14.94
何その勝手なイメージは
31名無しさん@お腹いっぱい。:2014/07/03(木) 18:24:18.78
お前の勝手なイメージを押し付けるな!
32名無しさん@お腹いっぱい。:2014/07/03(木) 18:59:57.41
× イメージ
○ イミッジ

これを間違えると日本人と思われて馬鹿にされるので気を付けるようにw
33名無しさん@お腹いっぱい。:2014/07/04(金) 00:34:23.82
× アイディア
○ アイデア
34名無しさん@お腹いっぱい。:2014/07/04(金) 00:44:50.44
日本人ってだけでバカにするのはアレな国の人だけだと思う
35名無しさん@お腹いっぱい。:2014/07/04(金) 10:39:04.06
checkbashism使ってみるのはどうか。
https://alioth.debian.org/scm/browser.php?group_id=30755
PerlスクリプトなのでDebian以外でも普通に動くはず。
36名無しさん@お腹いっぱい。:2014/07/04(金) 11:07:46.65
>>35
使ってみたことあるけどBourne shとの互換性チェックには全然ならないよ。
37名無しさん@お腹いっぱい。:2014/07/04(金) 11:13:37.98
ポータブルなスクリプトがデフォなのは賛成だが、
デフォが Bourne shell ( 商用 UNIX 等で生き残っている
Traditional Bourne shell と解釈しています ) とするのは反対

前から思っていましたが、多くの環境でわざわざインストールしないと使えない
Bourne shell にこだわる必要性は、少ないと思う

皆さんが、ポータブル性は POSIX 相当でも OK なら、こんな風にしたい

□お約束
・特記なき場合は #!/bin/sh がデフォルトです。この場合、ポータビリティーに注意し
 Traditional Bourne Shell もしくは、POSIX 相当のスクリプトでお願いします。
 bash/zsh/ksh/ash/dash などに依存する場合は明示しましょう。
38名無しさん@お腹いっぱい。:2014/07/04(金) 11:20:56.93
その辺はスレ立てる人が勝手に決めてるだけだから
次スレ自分で立てればいいよ。
39名無しさん@お腹いっぱい。:2014/07/04(金) 11:24:28.11
今回立てた時に、やはり了承を得てからと思って、コピペにしました

本当は、>>7 の言うことも納得で、
> □回答者への注意事項:
も消したかった
40名無しさん@お腹いっぱい。:2014/07/04(金) 20:54:39.48
>>1 です
暇を見て、話題の途切れたときにでもテンプレ案出してみます
411 ◆01VkPKFOHeoR :2014/07/05(土) 19:22:10.62
連投失礼します。テンプレ案考えてみました。かなり手を入れました
どんどん指摘して下さい
ただし、こんな風にしろとかだけでは無く、具体的に修正したものを付けて下さい
指摘された事に、別の方の反論が無ければ、そのまま機械的に取り込みます
考慮が足りなかった場合は、後で条件を追加・変更する事も有ります

変更点
1. ">>1 A.3 を見てね" と簡単に指摘出来る様に、番号をふりました
2. 日本語とアルファベットとの間に半角スペースを入れました。/ ( ) 前後にも
3. お約束の項目でお約束で無い、前提知識等をお約束の補足に移動しました
4. 初心者でも参加しやすい様に、工夫しました
 ( 特にポータブル志向がハードルを上げ、参加をさまたげ無い様に )
5. Bourne Shell ポータビリティー POSIX について、説明を加えました
6. MacOSX について触れていないのが気になったので、書き加えましたが、
 /bin/sh と /bin/bash でバイナリーサイズ、inode が違うらしいです
 詳しい方、ぜひ修正をお願いします
  https://discussions.apple.com/message/18600748
7. 過去ログから、テンプレートを復活させてみました。所々変えてます。
8. Wiki でなくこのスレで、気軽にテンプレ修正議論が出来る様に、してみました。
421 ◆01VkPKFOHeoR :2014/07/05(土) 19:23:09.35
シェルスクリプトの総合スレです。
初心者、学生、アマチュア、プロ、シェルの種類や OS を問いません。
スクリプトのお勉強・自慢・腕試しなどにどうぞ。
まずはテンプレートをご覧下さい。

□A. お約束
1. 特記なき場合は #!/bin/sh がデフォルトです。この場合ポータビリティーに注意し、
 Traditional Bourne Shell もしくは、POSIX 相当のスクリプトでお願いします。
 bash / zsh / ksh / ash / dash や OS 等に依存する場合は、明示しましょう。
 良く分からない方は、使用している OS を書いておけば OK です。是非ご参加下さい。
2. 質問する前に、まず自分で調べましょう。ただし、
 「聞くは一時の恥、聞かぬは一生の恥」です。積極的に参加しましょう。
3. 相手を侮辱する発言、失礼な発言は差し控え、知的な議論を楽しみましょう。
4. 他者には様々な環境や事情、目的が有る事に留意し、無下に扱う様な発言は
 控えましょう。
431 ◆01VkPKFOHeoR :2014/07/05(土) 19:23:52.16
□B. お約束の補足
1. Mac OS X では、/bin/sh の実体は bash です。また、一般的に BSD 系 や
 GNU/Linux の方は、/bin/sh がシンボリックリンクですので、注意して下さい。
 ls -l /bin/sh や readlink -e /bin/sh で確かめて下さい。
2. ポータビリティーについては、下記 F.1 を参照して下さい。
3. POSIX については、man 7 standards や下記 F.2 ( の特に Shell & Utilities )
 を参照して下さい。
4. Traditional Bourne Shell とは、UNIX Version 7 から SVR4.2 の /bin/sh を元に
 小さなの改変を加え主に商用 UNIX で残されているものです。( 下記 F.3 参照 )
5. Traditional Bourne Shell で入手しやすい sh は、後期 SVR4.0 から派生し、
 SunOS 5 / OpenSolaris を経た、Heirloom Bourne Shell です。
 SVR4 / SVID3 相当です。同様の Unix utilities も扱っています。
 ( 下記 F.3 参照 )
441 ◆01VkPKFOHeoR :2014/07/05(土) 19:24:44.97
□C. 初心者へのアドバイス
1. シェルスクリプトのことをシェルってゆーな
2. 知らないコマンドが出てきたら man コマンドで調べましょう。
3. UNIX には、シェルスクリプトに便利な小さなコマンドが色々あります。
 apropos ないしは man -k でそれらしい単語による簡単な検索もできます。
4. シェルの構文や内部コマンドは man sh で。英語は LANG=C man shで。
5. 思い通りに動かないときは、まずは #!/bin/sh -x でトレースしましょう。
6. 適した道具を判断するのも頭の重要な使い方。シェルスクリプトよりも
 awk / perl / javascript / ruby / python 等、他の (スクリプト) 言語の方が
 適した処理にはそちらを使いましょう。
7. シェルで使えるワイルドカード等は正規表現ではありません。
 正規表現の話題は正規表現スレへ
8. csh / tcsh のシェルスクリプトは推奨されません。理由は下記を参照
 http://www.speech-lab.org/~hiroki/csh-whynot.euc
451 ◆01VkPKFOHeoR :2014/07/05(土) 19:26:23.53
□D. シェルスクリプトでよく使うコマンド
1. 制御・条件判定系: [, test, expr, true, false, yes, getopts
2. テキスト処理系: cat, awk, sed, tr, sort, uniq, grep, wc, head, tail, cut,
 paste, comm, join
3. ファイル検索系: find ( スペースなどを含むファイル名を正しく処理するため、
 find は -exec command {} + を推奨。
 他に -print0、xargs は -0 オプションという方法もあるが Solaris 非対応 )
4. ディレクトリ系: basename, dirname
5. 出力系: echo, printf
6. 対話コマンド制御系: expect
7. http / ftp の処理自動化: wget, curl
461 ◆01VkPKFOHeoR :2014/07/05(土) 19:28:43.20
□E. 学習用テキスト
1. Bourne&#160;Shell自習テキスト ( 1993年 )
 http://lagendra.s.kanazawa-u.ac.jp/ogurisu/manuals/sh-text/sh/index.html
2. シェルを使おう - 導入からプログラミングまで - ( 2002年 )
 http://www.netfort.gr.jp/~tomokuni/lms/shell/
3. 入門用図書
 a. 特に話題に上らなければ削除します
4. お勧め図書
 a. 特に話題に上らなければ削除します
471 文字化け修正です ◆01VkPKFOHeoR :2014/07/05(土) 19:30:27.22
□E. 学習用テキスト
1. Bourne Shell自習テキスト ( 1993年 )
 http://lagendra.s.kanazawa-u.ac.jp/ogurisu/manuals/sh-text/sh/index.html
2. シェルを使おう - 導入からプログラミングまで - ( 2002年 )
 http://www.netfort.gr.jp/~tomokuni/lms/shell/
3. 入門用図書
 a. 特に話題に上らなければ削除します
4. お勧め図書
 a. 特に話題に上らなければ削除します
481 ◆01VkPKFOHeoR :2014/07/05(土) 19:31:15.26
□F. 参考リンク
1. ポータビリティー関連
 a. autoconf マニュアル 移植性のあるシェルプログラム
  http://www.gnu.org/software/autoconf/manual/autoconf.html#Portable-Shell
  http://www.geocities.jp/fut_nis/html/autoconf-ja/Portable-Shell.html
 b. Portability talk [Bash Hackers Wiki] 英文
  Obsolete and deprecated syntax も見る価値有り
  http://wiki.bash-hackers.org/scripting/nonportable
 c. How to make bash scripts work in dash 英文
  http://mywiki.wooledge.org/Bashism
 d. DashAsBinSh 英文
  https://wiki.ubuntu.com/DashAsBinSh
 e. Portable Shell Programming 英文
  http://www.in-ulm.de/~mascheck/various/portability/
2. POSIX
 The Open Group Base Specifications Issue 7 IEEE Std 1003.1, 2013 Edition 英文
 http://pubs.opengroup.org/onlinepubs/9699919799/
49名無しさん@お腹いっぱい。:2014/07/05(土) 22:00:04.09
自分の場合は書籍はあまり見てなかった
入門時に一番参照したのは、UNIX FAQ なんだよね (NetNewsに流れてたの)
http://www.nurs.or.jp/~asada/FAQ/UNIX/UNIX.FAQ.html
例えばサブシェルとかは、知ってないとハマってしまう

>>47のBourne Shell自習テキストは、HTML化がいまいちなので
LaTeXの方を見て欲しい。誰かPDFで公開してないかな
と思ったらあった
http://ayapin.film.s.dendai.ac.jp/~matuda/Lecture/PDF/sh-two.pdf
50名無しさん@お腹いっぱい。:2014/07/05(土) 22:37:15.59
参考リンクはともかく、学習用文書はいらなくないか?
あまりテンプレ充実しすぎてても考え物な気がする
今までが1レスだったから特に

しかしポータビリティって単語好きだね
51名無しさん@お腹いっぱい。:2014/07/05(土) 23:12:47.63
可搬性
52名無しさん@お腹いっぱい。:2014/07/05(土) 23:39:10.47
POSIXのPはポータブルのP。
531:2014/07/06(日) 06:20:22.54
連投規制中です。しばらく待ちましたが、いっこうに書き込めません
代行さんに書き込んでもらっています
続きは明日以降で。参考リンクが、まだ続いて、他に
前スレ、関連スレ、テンプレートの変更案
が有ります。これ以上長いと、問題有そうですが
とりあえず、あげてみます
54名無しさん@お腹いっぱい。:2014/07/06(日) 11:44:27.01
テンプレ貼るのに連投規制食らうようなものはいかんだろう。
つーか、今テンプレ決めて次スレ立つの何年後だよwww
55名無しさん@お腹いっぱい。:2014/07/06(日) 16:59:31.66
前スレは1年かからなかった。
3. Traditional Bourne Shell 関連
 a. The Traditional Bourne Shell Family History and Development 英文
  http://www.in-ulm.de/~mascheck/bourne/
 b. BourneShell / Where does the Bourne shell live? 英文
  http://mywiki.wooledge.org/BourneShell
 c. The Heirloom Bourne Shell 英文
  http://heirloom.sourceforge.net/
4. マニュアル
 a. The Base Specifications Issue 7, 2013 Edition 英文
  http://pubs.opengroup.org/onlinepubs/9699919799/nfindex.html
 b. FreeBSD 日本語マニュアル検索
  http://www.jp.freebsd.org/man-jp/search.html
 c. JM Project (Japanese)
  http://linuxjm.sourceforge.jp/
5. FAQ 等
 a. UNIXの部屋 ( 2011年 )
  http://x68000.q-e-d.net/~68user/unix/
 b. Linux JF (Japanese FAQ) Project
 http://linuxjf.sourceforge.jp/
571 ◆01VkPKFOHeoR :2014/07/06(日) 20:07:38.32
 c. Advanced Bash-Scripting Guide 英文
  http://www.tldp.org/LDP/abs/html/
 d. Unix Programming FAQ 日本語訳 ( 2000年 )
  http://www.race.u-tokyo.ac.jp/~moro/unix-programmer/
6. ツール

□G. 前スレ
1. ☆シェルスクリプトを勉強するにあたって☆
 http://hibari.2ch.net/test/read.cgi/unix/989659936/
2. 便利なシェルスクリプト見せろ
 http://pc.2ch.net/test/read.cgi/unix/996949546/
3. シェルスクリプト総合 その1
 http://pc5.2ch.net/test/read.cgi/unix/1101820646/

中略。検索して下さい

4. シェルスクリプト総合 その23
 http://peace.2ch.net/test/read.cgi/unix/1404204950/
□H. 関連スレ
1. sed
 http://peace.2ch.net/test/read.cgi/unix/1085730992/
2. 正規表現
 http://peace.2ch.net/test/read.cgi/unix/1039165754/
3. Regular Expression(正規表現) Part12
 http://peace.2ch.net/test/read.cgi/tech/1387257592/
4. Perlについての質問箱 63箱目
 http://peace.2ch.net/test/read.cgi/tech/1392906213/
5. ECMAScript デス 4
 http://peace.2ch.net/test/read.cgi/tech/1325448978/
6. Rubyについて Part49
 http://peace.2ch.net/test/read.cgi/tech/1382307475/
7. Pythonのお勉強 Part49
 http://peace.2ch.net/test/read.cgi/tech/1387528488/
8. 【node.js】サーバサイドjavascript 2【Rhino】
 http://peace.2ch.net/test/read.cgi/tech/1358937029/
591 ◆01VkPKFOHeoR :2014/07/06(日) 20:14:23.19
□I. 現在評価待ち: X.n は予定した追加先。主にスレ立て人の判断保留用。
1. F.6 ツール
 a. web tool です。Vim syntastic や Emacs の Flycheck でも使えます
  ShellCheck
  http://www.shellcheck.net/about.html
601 ◆01VkPKFOHeoR :2014/07/06(日) 20:20:15.84
□J. テンプレートの変更案や、おすすめの本、リンク等が有りましたら続けてどうぞ!
1. 検索しやすい様に、先頭に "コメント複数行\n指示\n□X" を付けて指定して下さい。
 追加や、削除、挿入、移動、分割等と適切に書いて下さい。
 900 レスまでに別の方の反論が無ければ、次にスレッドを立てる人が適当に判断して
 取り込むはずです。
2. レス例
スクリプトスレを列挙するのは不要に感じる
削除
□H. 関連スレ
 H.5から8 ECMAScript, Rubyについて, Pythonのお勉強, サーバサイドjavascript

3. レス例
これは、聖なる本
追加
□E. 学習用テキスト
4.お勧め図書
 a 伝承シェルプログラミング ( 199X年 )
  http://www.example.net/404.html

| テンプレートの変更案や、お勧めのリンク、本等が有りましたら、
V あ、張り切って〜、どうぞ〜! 案じゃ無くてつぶやきでも、どうぞ〜!
611 ◆01VkPKFOHeoR :2014/07/06(日) 20:42:24.70
自分でも追加してみます。syntastic とか、shlint とかって、使っている人少ない
みたいですがどうですか?
追加
□F
6. ツール
 b. vim 用 syntastic
  https://github.com/scrooloose/syntastic
 c. checkbashisms も使用してチェック duggan/shlint GitHub
  https://github.com/duggan/shlint

>>49
挿入
□E. 学習用テキスト
3. UNIX FAQ LIST
 http://www.nurs.or.jp/~asada/FAQ/UNIX/UNIX.FAQ.html
621 ◆01VkPKFOHeoR :2014/07/06(日) 20:52:47.98
>>49
修正
□E. 学習用テキスト
1. Bourne Shell自習テキスト ( 1993年 ) pdf お薦め
 http://lagendra.s.kanazawa-u.ac.jp/ogurisu/manuals/sh-text/sh/index.html
 http://ayapin.film.s.dendai.ac.jp/~matuda/Lecture/PDF/sh-two.pdf

# >>50 削除どうしましょう?余計そうなものが他にも有るので、ご意見下さい。
# 出来れば、初心者も歓迎する雰囲気を消したくないのと、>>49 とぶつかるので。
# >>50 案 長すぎるので、学習用テキストは不要ではないか
# 削除
# □E. 学習用テキスト

# あと、ポータビリティーについて、私は違和感が無かったのですが、日本語じゃないかも。
# いくつか書籍も調べました。書き込めたら、別に書きます。
# 回りくどい書き方しましたが、ツール類のご意見下さい。

# 以上です。連投失礼しました。
# >>49 UNIX FAQ LIST 見覚えある。なつかしい。fj とかも見てましたよ。買い物したり
63名無しさん@お腹いっぱい。:2014/07/06(日) 22:40:39.84
portability の訳語についてです。移植性、汎用性、可搬性と訳されているようです
ポータビリティーはそのままじゃあ通じないのかなあ?しっくりくる言葉のご意見下さい

O'Reilly Japan - 詳解 シェルスクリプトでは、移植性 としています
原著 Classic Shell Scripting Shell Portability Issues and Extensions

入門UNIXシェルプログラミング―シェルの基礎から学ぶUNIXの世界
汎用性としています。原著は未確認
可搬性は、O'Reilly Japan - 入門 bash や、bashクックブックで使われています

スクリプトではないですが、Small is beautiful. ではじまる、UNIX 哲学とかでは
本や、ネットを見ると Choose portability over efficiency. で移植性や、移植しやすさ
あと、F.1.a autoconf マニュアル は、移植性のあるシェルプログラム です

次に、連投規制についてですが、もしかして誤解されていたら残念なので一応
前置き、1 候補の A. B を分割して書き込んだ事、E を 2 回書いた事で、
3 レス分は余計に書いていますので、一応ほぼ全てを一度に書き込めはします
書けない 2 レス分+αは、スレ消化前に少し早めに立てて、分けて書き込むとかで
無理ではないかと思います

ただ、今までが 1 のみだったので、>>50 ももっともです。どんどん書き変えて下さい
64名無しさん@お腹いっぱい。:2014/07/06(日) 22:45:14.31
 わりと
   どうでもいいよね〜                   ね〜♪
                         _ ‐..::  ̄ ̄ ::::... 、
              . ィ            r'::/ ::ィ:::::::::::j:::::::ヽ::::\
,._.._ .......、._    _ /:/l!            | ::|::/ |::::::::∧:::レ::l:::| :::::rヘ
ヽ :~""''.>゙' "~ ,、、''‐'、|          l ::仏_ノヘ:/ ー- ハ:::!::::::|::::i
 ゙、'、::::::ノ:::::::_,.-=.  _〜:、          /::::リy=ミ ' ィ=ミ /:::::!::::/:::::!
  ``、/:::::::::__....,._ `゙'Y' _.ェ-、..._      |::::{xx     xx/::::::「)'|:::::::|
  ,.--l‐''"~..-_'.x-='"゙ー 、`'-、      lハ:仆 ..._ヽフ /:::: /´ |:::::::|
 "   .!-'",/  `'-‐'') /\ `      Y::::ソ勺 7イV_  !:::::::!
  .-''~ >'゙::    ‐'"゙./  ヽ.    __  |::/ 爻___ん'´ッ'⌒ヽ! :::::!
    //:::::       ',        (__,、\/ /‐―一弋{、  /  ̄_)
   ' /:::::       .:';          \ ' {      :::\   /~::!
65名無しさん@お腹いっぱい。:2014/07/06(日) 22:50:31.53
どうでもよくない
66名無しさん@お腹いっぱい。:2014/07/06(日) 22:55:44.82
めっちゃ頑張ってるのは評価するが需要にあってるかどうか微妙
レスを見ても長すぎるテンプレを褒める書き込みはない
その16でどんな議論があったのかは知らんが、今の提案は全部長文すぎて読む気が起きん
Small is beautifulなんだろう?
67名無しさん@お腹いっぱい。:2014/07/06(日) 23:03:24.69
 ―┼‐         ノ     /   |  --ヒ_/     /   \ヽヽ    ー―''7
   `」   ┼,   二Z二   レ   /  /´レ' \ ―7 ̄}  |  ー-、   /
 (__  (|フ)   (__ノ  _ノ  ∨`  ノ  /  /     _ノ    \_

    ─┼-        /   |   ‐┼-   |     ー|―
    ─┼─ |   \ レ  /   ̄Tー  /      ノ -─
   (二フヽ  \/    _ノ   (二フ\  ヽ_ノ   / 、__

     i';i
    /__Y
     ||真||                   /⌒彡
  _ ||露||         /⌒\     /冫、 ) ・・・・・・。
  \ ||  || ̄ ̄ ̄ ̄ ̄ ̄ ̄\ `./⌒ i `  /ゝ    _,,..,,,,_
  ||\`~~´  (十万石)     \( >     ('\\  ./ ,' 3 `ヽーっ ・・・・・・。
  ||\|| ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|| ̄\`つ    ⌒ _) l   ⊃ ⌒_つ
     .|| ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄||                `'ー---‐
( 'A) ・・・。 〃∩ ∧_∧        <⌒/ヽ___
/(ヘ)ヘ    ⊂⌒(  ・ω・) ・・・。  <_/____/ zzzz・・・
         `ヽ_っ⌒/⌒c
68名無しさん@お腹いっぱい。:2014/07/06(日) 23:53:00.43
テンプレはどっかのwikiに置いてよ。
69名無しさん@お腹いっぱい。:2014/07/07(月) 00:09:44.87
http://info.2ch.net/

2ch公式のwikiがあるからここ利用したら良いよ
70名無しさん@お腹いっぱい。:2014/07/07(月) 06:30:40.74
>>64 勝手に進めてま〜す♪

>>66 "Small is beautifulなんだろう?" は必要ですか?皮肉っぽく不快です
読む気が起きないなら、どこを削除するか具体的にお願いしますとは言えないので、
ごっそり削除した案を上げておきます

長くなった部分は、1.過去ログの内容も多く、他に 2.移植性、3.POSIX、
4.Bourne Shell、5.関連スレや、6.テンプレ変更案を促す内容を追加しましたが、
ほぼ削除しました

>>49 で UNIX FAQ を上げてもらっているので、何らかの参考リンクは
有ってもいいのでしょうが、取捨選択、別途追加は皆さんにお任せします

>>68 >>69 せっかくの提案ですが、今後とも wiki でなくこのスレで進めた方が
良いと考えているので、少なくとも私は作りません。申し訳ない
71名無しさん@お腹いっぱい。:2014/07/07(月) 06:31:14.62
長すぎて、読む気がしない
修正、削除
□A. お約束 --- >>42 そのまま
□B. お約束の補足 --- 下記。2, 3, 4 参考リンクへの参照を止め直接記入 5 削除
□C. 初心者へのアドバイス --- >>44 そのまま
□D. 前スレ --- に変更して直前スレのみにする
1. シェルスクリプト総合 その23
 http://peace.2ch.net/test/read.cgi/unix/1404204950/

□その他 --- 削除
72名無しさん@お腹いっぱい。:2014/07/07(月) 06:31:57.21
□B. お約束の補足
1. Mac OS X では、/bin/sh の実体は bash です。また、一般的に BSD 系 や
 GNU/Linux の方は、/bin/sh がシンボリックリンクですので、注意して下さい。
 ls -l /bin/sh や readlink -e /bin/sh で確かめて下さい。
2. ポータビリティーについては、下記を参照して下さい。
 a. autoconf マニュアル 移植性のあるシェルプログラム
  http://www.gnu.org/software/autoconf/manual/autoconf.html#Portable-Shell
  http://www.geocities.jp/fut_nis/html/autoconf-ja/Portable-Shell.html
 b. Portability talk [Bash Hackers Wiki] 英文
  http://wiki.bash-hackers.org/scripting/nonportable
3. POSIX については、man 7 standards や下記
 ( の特に Shell & Utilities ) を参照して下さい。
 The Open Group Base Specifications Issue 7 IEEE Std 1003.1, 2013 Edition 英文
  http://pubs.opengroup.org/onlinepubs/9699919799/
4. Traditional Bourne Shell については、下記を参照して下さい。
 a. The Traditional Bourne Shell Family History and Development 英文
  http://www.in-ulm.de/~mascheck/bourne/
 b. The Heirloom Bourne Shell 英文
  http://heirloom.sourceforge.net/
73名無しさん@お腹いっぱい。:2014/07/07(月) 07:01:26.69
テンプレなんてドーデモエー
テンプレ検討だけでスレ埋めるなよ
シェルスクリプトの話しろよ
74名無しさん@お腹いっぱい。:2014/07/07(月) 09:01:44.79
ポータビリティーがそのままじゃ通じないとか言ってんじゃねえんだよ
ただ読み方カタカナ表記しただけの長々しいカタカナが君には見やすいのか

俺はそう思わないしカタカナ列挙した糞翻訳は読みづらいし頭に入ってこない
極論すれば英語のままの方がマシだ

で、
できるだけ環境問わずそのまま使えるようにするのは
可搬性の向上なんだよ

移植性だと書き換え前提でその書き換えをしやすくする感じが強くなる
汎用性は可搬性みたいなことよりも*目的*を限定しない感じになる
75名無しさん@お腹いっぱい。:2014/07/07(月) 09:16:21.73
/.:::.::.::.::.:: ト\ /∧:.::.::.::|:.::.:: |:.::.::.:.::.::.:.::.::.:.\
.: ::.::.::.::.::. |-‐''"´│:.::.::.|:.::.::.jヽ ::.:.::.:.::.::. |::.:.::.:.
.: ::.::.::.::.: l:|    |:j.::._∧::.:/ ハ.::.::. }::.::.:|^';.::.::'.
.: ::.::.::.::.: |:!=-、  ノ:'!.::;仁∨ j:ハ.:: ;'::.::.::|ノ} :.::.'、    ふ〜ん …で?
.::.::.|.::.::.::.|:ヽ    ∨ '弌示圷 j/.:: /.::| '.::.::.::.:ヽ
.:|.: |.::.::.::.'ャ弌示       ゝ.:ソ /.::./ :.::|/.::.::.::.::.::.::\
.::!八.::.::.::ヘ ゝ.:ソ         ̄´厶:イ :.::.:|、.::.::.::.::.::.::.::.:\
、ヽ.:\.::.::.:.. `  ,         |:i.::.::.::| \.::.::.::.::.::.::.::.:. \
.丶.:\:|>‐ヘ              | .::.::.::|  丶、 _;rz: -‐ ⌒丶、
  \:〈 ^トーゝ_   --、       1 :.::.::.|        //       \
    |ヽ´  ⌒>‐ 、   、<. │.::.::. !      //         丶、
    |.:: \      `く. Y:| \|.::.::.::.|      |:l                \
    |.::.::.::.`7ーr:、    ,ノ::lヽ _|.::.::.: |   / j:j                \
    |.::.::.:: /  |:/    / |::{  |.::.::.: |´ ̄  /:/   、__            \
    |.::.::.:/  /    / .l八 │:.::.: |    |::|     '⌒丶、
76名無しさん@お腹いっぱい。:2014/07/07(月) 09:18:42.70
割りと胴で萌ぇ
77名無しさん@お腹いっぱい。:2014/07/07(月) 09:46:44.64
テンプレは自分で勝手に決めていいよ。
78名無しさん@お腹いっぱい。:2014/07/07(月) 10:48:06.14
いちいち誰にでもわかりやすいようにする必要はない。
ポータビリティで通じるし、通じないならそいつがタコなだけ。
シェルスクリプト書くような奴は、単語の意味を自分で調べるくらいできる。

ここは幼稚園か? 違うだろ? 出来ない奴は相手にしなければいいだけ。
目の前にすぐ調べられる魔法の箱があるのに活用できない奴は、もはや現代では馬鹿の謗りを免れえない。
79名無しさん@お腹いっぱい。:2014/07/07(月) 12:18:24.40
bashって$RANDOMが定義済みなんだな。
自分で範囲を決めて作ったランダムを$RANDOMに突っ込んで、
呼び出したときの値の範囲がおかしいから、???ってなったわ。
頭にBASH_つけるとかして欲しかったな。
80名無しさん@お腹いっぱい。:2014/07/07(月) 12:33:34.10
>>79
それは bash独自じゃなく、zshでも kshでも同じだよ。

RANDOMを普通変数として使いたいなら、
先に unset RANDOM してから RANDOM=1234 とか自分で代入すれば値は変化しない。
81名無しさん@お腹いっぱい。:2014/07/07(月) 13:11:10.01
zshだとunsetしても普通の変数にはなってくれないよ
82名無しさん@お腹いっぱい。:2014/07/07(月) 13:43:36.07
純正シェルで使って良いシェル変数は$aから$mの13個だけだと言ってるだろうが。
83名無しさん@お腹いっぱい。:2014/07/07(月) 13:46:22.00
いま純正シェルの話じゃないから。
84名無しさん@お腹いっぱい。:2014/07/07(月) 17:41:52.70
ファイルがたくさんあって、それら全部に対して
・手っ取り早く文字コードを調べるのにfileコマンドを使う (file *)
・正確に出したい時にiconvコマンドを使う (iconv -f code < filename)
という事をやってたんだが、手っ取り早く正確に文字コードを調べる方法って何かないかな?
むしろ皆のやり方を知りたい
85名無しさん@お腹いっぱい。:2014/07/07(月) 17:42:00.33
前スレ http://peace.2ch.net/test/read.cgi/unix/1383260330/990 のつり餌
> bourneシェルの中でもV1-V6はコマンドラインインタプリタとしての...
> PWBシェルでも動作可能なことが純正シェル道

V1 - V6 は Bourne shell ではなく、Thompson shell
その22 のスレのデフォルトシェルは Bourne shell であって Mashey shell ( PWB shell ) ではない

よって、前スレ >>983 を失格というのは間違い
そもそも、Bourne shell の B は大文字で書く
86名無しさん@お腹いっぱい。:2014/07/07(月) 17:44:47.15
純性シェルじゃないと何が困るの?
87名無しさん@お腹いっぱい。:2014/07/07(月) 17:45:52.30
>>84
nkf -g
88名無しさん@お腹いっぱい。:2014/07/07(月) 17:46:08.15
$()使うなとか言い出す輩がいる
89名無しさん@お腹いっぱい。:2014/07/07(月) 19:14:22.01
>>88
$( )を使わないようにすることは、Bourneシェルを基準にすることで達成されるから、
純正シェルまで遡る必要はなくなる。
90名無しさん@お腹いっぱい。:2014/07/07(月) 19:16:57.19
nkf←古くて時代遅れ
iconv←今風これからの標準

って認識あるんだけどnkfの方が全体的に使いやすいし
機能も豊富だからつい使っちゃうんだよなあ
91名無しさん@お腹いっぱい。:2014/07/07(月) 19:59:00.94
iconvって文字コードにエラーがあるとファイルの途中で異常終了しちゃうから使いにくい。
92名無しさん@お腹いっぱい。:2014/07/07(月) 20:38:05.32
>>86
困るとかじゃなく、あれは武道とか精神修練とかそっち系のアレだから。
93名無しさん@お腹いっぱい。:2014/07/07(月) 23:24:27.14
nkf入ってないんだよなうちの会社の環境…
別環境でnkf -gがめっちゃ使いやすかったからなんで入ってないんだと思ってしまう
客先環境だから仕方ないんだけどさ
94名無しさん@お腹いっぱい。:2014/07/08(火) 11:12:40.53
>>90 にならってみた
nkf ← 日本語 / 自動判定有り / 入っていない事がある / 素敵
iconv ← 多言語 / 自動判定無し / POSIX / i昆布とか名前が嫌い
>>84 が日本語と限定してないので nkf と思っても、考えてしまった
>>91 iconv -c とか?
>>86
コンパイル時に使用するスクリプトでは、場合により v7 shell でも動く様に書いた方がいい
みたいです
autoconf マニュアル (24 April 2012) を見ると v7 shell や SVR2 がどうのと書いています
# commentsも使うなとか言い出す輩です。: comments とかは何かで使った覚えが有るけど

>>78 でポータビリティで通じない奴はタコだと。確かに
>>74 なるほど、全ての場合についてのコメントが参考になります
コンピュータと電算機の様に、カタカナvs漢字については個人・職業差も有りますが、
>>51 >>74 で可搬性を積極的に押される方がいるし、
>>63 >>78 は特にポータビリティ押しではないので、今のところ可搬性に決まりですか?
95名無しさん@お腹いっぱい。:2014/07/08(火) 11:13:47.31
テンプレがどうでも良い方は、どうでも良いとして、>>65 >>73 の意見もあるので、
話題が尽きた時等、スクリプトの話の邪魔にならない程度に、遠慮ぎみに進めたいと思います

特にレスが無ければ、長いという意見と可搬性という意見で、>>71 を元に可搬性としたものに
なりそうです
96名無しさん@お腹いっぱい。:2014/07/08(火) 11:24:27.61
iconv -c でも駄目な場合がある。
nkfはそういう場合でもデコード頑張る。
97名無しさん@お腹いっぱい。:2014/07/08(火) 12:43:54.29
nkfの方が日本語を扱う上で現実的
98名無しさん@お腹いっぱい。:2014/07/08(火) 12:48:17.25
この程度のテンプレは長いに入らん
スレ立てる人が面倒で無ければテンプレ付ければいいし
面倒なら誰かに任せてもいい
99名無しさん@お腹いっぱい。:2014/07/08(火) 15:55:56.14
いや長い
まぁどうせ1回読んだらもう読まないし長いから何が困るってこともないんだが
その長いテンプレを議論する為に何レスも長文が続くのはゴメンだわ
100名無しさん@お腹いっぱい。:2014/07/08(火) 19:18:04.90
>>95
そうそう、
http://peace.2ch.net/test/read.cgi/bgame/1373037042/
のテンプレと比べたら大したことないよね
101名無しさん@お腹いっぱい。:2014/07/08(火) 23:55:30.14
ふむ。ちょっとテンプレ短すぎかもしれないね
102名無しさん@お腹いっぱい。:2014/07/09(水) 01:02:34.06
>>100
テンプレくっそ笑ったwww
103名無しさん@お腹いっぱい。:2014/07/09(水) 01:32:21.63
こ、これは凄いなw
104名無しさん@お腹いっぱい。:2014/07/09(水) 01:46:32.61
>>102
そのスレのテンプレはこれでもかなり簡略化されたほう
過去ログだと200レスくらいテンプレだったりする2chでは伝説のスレ
105名無しさん@お腹いっぱい。:2014/07/09(水) 07:17:36.50
>>100 >>104
100レス目にふさわしい書き込みGJ
111レスでもすごいが、以前は200もあったのか!? 個性的なスレだ
106名無しさん@お腹いっぱい。:2014/07/09(水) 21:13:58.36
>>100
キーボードでスクロールする俺には辛いテンプレだわ…w
107名無しさん@お腹いっぱい。:2014/07/11(金) 11:29:07.96
このスレって「シェルスクリプト高速開発手法入門」とかUSP MAGAZINEとか読んでる人いるの?
108名無しさん@お腹いっぱい。:2014/07/11(金) 11:59:21.47
USP MAGAZINE → 定期購読
シェルスクリプト高速開発手法入門 → 買ったけど積ん読状態
109名無しさん@お腹いっぱい。:2014/07/12(土) 02:57:49.50
高速開発手法って発売前にちょっと噂になって興味あったけど、アマゾンの「なか見!」読んだら一気に冷めたわ
Cとかで書いたプログラムをシェルから実行するだけみたいだし、本書で解説するbashCMSは著者自身は使って無くて、
WordPress使った方が得って著者自身が書いてて、え?じゃあ意味無いじゃんって 完全にネタ本
110名無しさん@お腹いっぱい。:2014/07/12(土) 03:04:31.69
釣れればいいんですよ釣れれば。
>>108みたいにお金出してくれる人が偉いんです。
111名無しさん@お腹いっぱい。:2014/07/12(土) 03:19:42.90
ここシェルスクリプトについての愚痴でもいいんすか?

いま、Visual Cで書かれたソースコードを
c shellにマイグレーションするという
とんでもないプロジェクトに今月から投入された
俺に慰めの言葉とアドバイスをくれ

あと質問だが、shellスクリプトとシェルスクリプト、どっちが正しい表記?
112名無しさん@お腹いっぱい。:2014/07/12(土) 04:01:04.76
>>111
君は多分自分の仕事をきちんと理解してないなw
113名無しさん@お腹いっぱい。:2014/07/12(土) 04:09:54.37
c shellて忌まわしきはcshのcshだよね
114名無しさん@お腹いっぱい。:2014/07/12(土) 07:59:48.46
gccとかmakeとか、シェル上のコマンドを使ってCプログラムを開発という意味だったりして
115名無しさん@お腹いっぱい。:2014/07/12(土) 14:35:12.56
>>108-110
実は自作自演
116名無しさん@お腹いっぱい。:2014/07/12(土) 14:41:47.48
シェルスクリプトとはほとんど関係ないけど、とりあえずネタふり
http://overthewire.org/wargames/bandit/
117名無しさん@お腹いっぱい。:2014/07/12(土) 20:21:13.77
シェルterminalに直接ソースを書いてhello worldってできるの?
118名無しさん@お腹いっぱい。:2014/07/12(土) 22:19:06.09
119名無しさん@お腹いっぱい。:2014/07/14(月) 00:42:07.40
はじめまして、誘導されて来ました。質問させて下さい。 ubuntu 11.20です。

1 yyyy-mm-dd
...
n yyyy-mm-dd

というテキストから、各行を名前に持つディレクトリを
n個 生成するのはどうしたらできますか?
また、できたディレクトリに、各日に撮影されたデータを
移動するうまいやり方があったら教えて下さい。
ファイル名の頭がyyyy-mm-ddとなっているのと、exif情報があります。

iphoneで撮影してdropboxのcamera uploadsに溜まっている 写真を整理しようと思い、

ls -h
cut -c-11
uniq

を調べながら使って冒頭のテキストを作るところまでできたところです。
「それならそもそもこういうやり方をすればもっと上手い」とかでも構いません。
当方プログラミングはほとんどわかりませんが、以上よろしくおねがいします。
120名無しさん@お腹いっぱい。:2014/07/14(月) 01:32:38.62
>>119
cat テキスト | xargs mkdir でディレクトリを作れる。

テキストを使わないなら
ls -1 | cut -c -11 | uniq | xargs mkdir
でもいいと思う。

ファイルの移動は、ファイルとディレクトリの 4文字2文字-2文字(日付の部分) が一致することを利用する。
for i in ????-??-?? ; do mv -i "$i"?* "$i"/ ; done

| (パイプ)と xargs と ? と for文 で出来るから、意味を調べていくといいと思う。
121名無しさん@お腹いっぱい。:2014/07/14(月) 01:33:41.74
>>119
mkdir2種類。
$ cat dates |while read n date;do mkdir $date;done
$ cut -d ' ' -f 2 dates |xargs mkdir

move
$ find . -mindepth 1 -type d -printf "%f\n"|while read d;do find . -type f -name "$d*" -exec mv {} $d \; ;done
122名無しさん@お腹いっぱい。:2014/07/14(月) 01:40:38.50
>>119
そもそもjhead -nで出来た気がする。
123名無しさん@お腹いっぱい。:2014/07/14(月) 01:58:51.30
>>122
これで文句ないだろ。
$ jhead -nf%Y-%m%d/%f *.jpeg

-nfのfは重複防止だから、場合によってはない方がいいかも。
124名無しさん@お腹いっぱい。:2014/07/14(月) 23:22:43.26
ログファイル等の検索で、
「ある文字列が最初に出た行以下すべてを表示する」場合、sedコマンド以外で簡単な方法ないでしょうか?
(有った気がするのですが忘れてしまいました)
125名無しさん@お腹いっぱい。:2014/07/14(月) 23:49:03.52
>>124
grepで-Aをでかくするとか、grepで行番号出させて最初の行番号からtailするとか
126名無しさん@お腹いっぱい。:2014/07/15(火) 00:44:39.09
>>124
$ awk '/ある文字列/,0' ログファイル
とか?
127名無しさん@お腹いっぱい。:2014/07/15(火) 09:12:14.40
改行または先頭からある文字列までをげとしておいて
先頭からある文字列までをそれで置き換えればいいのさ
128名無しさん@お腹いっぱい。:2014/07/15(火) 09:29:12.58
お前は何を言ってるんだ
129名無しさん@お腹いっぱい。:2014/07/15(火) 10:10:18.21
>>124
なんで sed じゃだめなん?
130名無しさん@お腹いっぱい。:2014/07/15(火) 10:53:40.15
>>124
findじゃないのか?
131名無しさん@お腹いっぱい。:2014/07/15(火) 11:20:14.93
>>130
findでどうやるの?
132名無しさん@お腹いっぱい。:2014/07/15(火) 11:36:05.62
ぱっと見awkで簡単にいけそうだなっと思ったが
>>126がどうなってんのか簡単過ぎてよくわからないw
133名無しさん@お腹いっぱい。:2014/07/15(火) 11:42:15.10
sedがダメという状況でawk使うというのは解決になってない気がしなくもない。

>>132
パターン条件だけ書いてデフォルトprintしてるだけだろ
134名無しさん@お腹いっぱい。:2014/07/15(火) 11:48:32.55
>>132
行範囲の終了条件が 0(偽)だからいつまでも一致せず、最後の行までという意味になる。
135名無しさん@お腹いっぱい。:2014/07/15(火) 11:50:06.54
>>132
sed -n '/regex/,$p' といっしょ。awk はファイル終端を表す $ が使えないので、
$ のかわりに常に偽の 0 で代用してる。
136名無しさん@お腹いっぱい。:2014/07/15(火) 11:52:21.20
ちょっと苦しいが、>>125以上の案が思いつかん…
tail -n $(( $(wc -l < file) - $(grep -c 'pattern' file | head -n 1) )) file
なんかすごい簡単にいけそうなのになにこれキモい…
sedならsed '/pattern/,$!d' fikeでいいのに
137名無しさん@お腹いっぱい。:2014/07/15(火) 11:52:49.79
なるほど
,0の部分がよくわからなかったんだ
0が一致しないから終わりまで全部って意味になるのね
138名無しさん@お腹いっぱい。:2014/07/15(火) 12:01:32.63
>>126みたいに簡単に書けるならsedでもawkでもいいんじゃね?w
139名無しさん@お腹いっぱい。:2014/07/15(火) 12:17:18.82
俺の中ではsedでいいじゃんという結論になっている
140名無しさん@お腹いっぱい。:2014/07/15(火) 13:02:52.08
なんでsedじゃだめなんだろう。
141名無しさん@お腹いっぱい。:2014/07/15(火) 13:17:40.07
ある文字列の検索が終ったあとは余計なCPUパワーを使わずに単純出力させたい。
sedを使う方法だとログを表示中(| less してるとかを想定)は、ずっとsedプロセスが残ったままで、それを経由するので無駄。
とか?
142名無しさん@お腹いっぱい。:2014/07/15(火) 13:19:21.62
>>136
>>125 はこんな感じとして、どういう事?
tail -n "+$( grep -ne "$regex" "$file" | head -n 1 | cut -d : -f 1 )" "$file"

ついでに、マッチした行の n 行下からの印字 (GNU sed)
sed -ne "/${regex}/,\$ { /${regex}/,+$(( n - 1 )) d; p }" "$file"
143名無しさん@お腹いっぱい。:2014/07/15(火) 13:29:06.38
>>141 がいいことを言った。
lessで表示する前提なら、

less +/ある文字列 logfile

だけでいいじゃんw
144名無しさん@お腹いっぱい。:2014/07/15(火) 13:37:26.67
>>141
それsed以外の方法でもたいてい同じになるんじゃね。
145名無しさん@お腹いっぱい。:2014/07/15(火) 13:39:25.76
なぜsed禁止なのか>>124に聞きたい。
外野の憶測じゃないく。
146名無しさん@お腹いっぱい。:2014/07/15(火) 13:55:45.10
>>141
つきるめるなら、文字列がマッチした時点でその行の先頭を指してる標準出力ファイルディスクリプタをもったまま
何らかのプログラムをexecするプログラムを作れということか!
いらねえw
147名無しさん@お腹いっぱい。:2014/07/15(火) 13:57:06.69
「男は度胸!何でも試してみるもんさ」
148名無しさん@お腹いっぱい。:2014/07/15(火) 14:01:24.62
>>145
禁止なんて誰も書いてないだろ
sedより簡単な方法があったような気がするから教えてだろ。
149名無しさん@お腹いっぱい。:2014/07/15(火) 14:15:08.24
>>148
> sedより簡単な方法があったような気がするから教えてだろ。
そうは書いてない。
150119:2014/07/15(火) 14:28:02.53
みなさんありがとうございました。>>120で思い通りのことができて嬉しいです。
雰囲気以上のことはあまりわかりませんでしたが調べてみます。
使いこなせるようになりたいのでまた疑問ができたら質問させて下さい。
ありがとうございました。
151名無しさん@お腹いっぱい。:2014/07/15(火) 15:02:59.04
>>149
どう解釈しても良いけど「sed禁止」と読み取れる
文言はどのへん?
152名無しさん@お腹いっぱい。:2014/07/15(火) 15:08:29.18
禁止というのはおれの誤読かもしれないけど
それならそうと>>124が訂正してくれればいい。
153名無しさん@お腹いっぱい。:2014/07/15(火) 15:40:34.02
ログファイル等の検索で、
「ある文字列が最初に出た行以下すべてを表示する」場合、sedコマンド以外で簡単な方法ないでしょうか?
(有った気がするのですが忘れてしまいました)

それほど複雑な文言じゃないが
154名無しさん@お腹いっぱい。:2014/07/15(火) 15:45:07.25
おそらく >>143 が期待される回答
155名無しさん@お腹いっぱい。:2014/07/15(火) 17:23:09.40
sedでも簡単だけど、言語かコマンドかでフィーリングが違うな。
awkでも出来るけど、なるべくcut使ったり。
156名無しさん@お腹いっぱい。:2014/07/15(火) 20:26:40.19
awkは「言語としても使えるコマンド」って印象があるなあ
プログラマだからそう思うのかな
157名無しさん@お腹いっぱい。:2014/07/16(水) 01:50:47.65
>>143を見てlessって思ったより便利なのかと思って試したんだが、
これlessで眺めるの前提だからうまく機能するんだな
これ利用してファイルに吐き出す方法ないものか
158名無しさん@お腹いっぱい。:2014/07/16(水) 02:02:13.79
>>157
表示されてないだけで、読み込まれてはいるんだから、何か違う気が。
159名無しさん@お腹いっぱい。:2014/07/16(水) 20:57:53.64
awkとかsed使うくらいならperlの方がいい
ポータブルだしね
160名無しさん@お腹いっぱい。:2014/07/16(水) 21:59:50.66
>>159
コマンドとして考えるとperlはちょっとデカいかな
長いスクリプト書くなら、複数プロセスを通すより軽くて良いが
161名無しさん@お腹いっぱい。:2014/07/16(水) 22:06:31.32
このスレで言うのもなんだが、awkとsed覚える前にPerl覚えちゃったクチだわ
awk/sed入っててPerl入ってないなんて組み込み系か宗教上の理由じゃない限り有り得ないし

さらにzshが意外とzsh内で完結できる守備範囲広いからそっちの方も勉強するようになって
ますますawk/sedは覚える機会が…
162名無しさん@お腹いっぱい。:2014/07/16(水) 22:32:42.77
俺もawk,sed覚える前にperl覚えたけど
大抵のことはbash,awk,sedその他で出来てしまうから
逆にperl書かなくなっちゃた派だな
163名無しさん@お腹いっぱい。:2014/07/16(水) 23:01:49.69
perlのワンライナーがキモくてどうも使う気になれない
164名無しさん@お腹いっぱい。:2014/07/16(水) 23:08:27.28
俺の場合、インタラクティブにはsed/awk
その組み合わせをメモするついでにシェルスクリプトにする場合もある
何にしてもshebangにsedやawkを書くことはないな、shになる

最初からスクリプトとして書くつもりならperlになるかな
こちらは逆にシェルスクリプトに埋め込むことを滅多にしない
165名無しさん@お腹いっぱい。:2014/07/16(水) 23:09:55.07
perlはワンライナーに限らずキモい使い方される事の多い環境。
ワンライナーではキモいコード使うことが多いってだけで、
perlワンライナーのキモさは本質的にperlそのもののキモさ。

キモいけどまぁあれはあれで便利なもんだよ。キモいけど。
166名無しさん@お腹いっぱい。:2014/07/16(水) 23:14:05.74
awkとかsedは、ヒアドキュメントにして見づらくならない程度。
長くて2〜30行以内。
あと、拡張正規表現が標準正規表現と互換性(ほんの少しだけど)がないから、めんどくさい。
167名無しさん@お腹いっぱい。:2014/07/16(水) 23:15:14.38
perlのキモさを見て使いこなしたくなったけど結局勉強していない
168名無しさん@お腹いっぱい。:2014/07/16(水) 23:58:16.92
perlでがっつりスクリプト書くならCで書いちゃうなw
正規表現でさらっと処理するならawkかsedで充分。
169名無しさん@お腹いっぱい。:2014/07/17(木) 00:01:12.64
最近流行のキモかわいいって奴
170名無しさん@お腹いっぱい。:2014/07/17(木) 00:12:53.36
Rubyのほうが相性いい
171名無しさん@お腹いっぱい。:2014/07/17(木) 02:21:44.72
Apacheの1日分のログで、IPアドレスごとに1分ごとの平均接続数を一覧で確認したいのですが、どうゆう方法で1分ごとの平均を出したらいいのでしょうか?あ、スレ違いとかスレ目的とずれてたらスルーしてください。
172名無しさん@お腹いっぱい。:2014/07/17(木) 03:58:54.58
>>171
出現回数数えて1日で割ればいいだろ。
173名無しさん@お腹いっぱい。:2014/07/17(木) 09:15:03.26
>>171
確かに!

DoSとかクロールとかが埋もれないようにとか思ってたけど、それで十分ですね。
ありがとうございます!

難しく考えすぎてました...orz
174名無しさん@お腹いっぱい。:2014/07/19(土) 13:56:55.63
124と似ていますが、行番号だけの表示をさせたい…
シェル作成しているのだが(行番号を取得してログの一定範囲を表示させたい)んだが、sshで別サーバのログをgrep,sed,awkしてたりするんだが、上手くいかない…
わかりづかくて申し訳ない
175名無しさん@お腹いっぱい。:2014/07/19(土) 14:08:26.92
わからんなw
176名無しさん@お腹いっぱい。:2014/07/19(土) 14:09:31.57
今まで書いた部分をstackoverflowあたりに貼って質問してみれば
177名無しさん@お腹いっぱい。:2014/07/19(土) 14:10:19.25
>>174
awk '/ある文字列/{print NR}' logfile
178名無しさん@お腹いっぱい。:2014/07/19(土) 14:12:15.92
>>174
sed -n '/ある文字列/=' ログファイル
179名無しさん@お腹いっぱい。:2014/07/19(土) 14:17:49.12
>>177-178
最初に一致した行番号だけ表示するならqやexitを追加しとけ。

sed -n '/ある文字列/{=;q}' file
awk '/ある文字列/{print NR;exit}' file
180名無しさん@お腹いっぱい。:2014/07/19(土) 14:42:31.15
>>177
>>178
>>179
どうもです。まださわりはじめたばかりでどうも入りづらく…
ちなみに私が実施していたコマンド
set 変数 = `ssh 鯖 " grep -n 文字 ファイル | tail -1 | sed 's/ /: g' | awk '{print $1}'
環境がいまないので教えていただいたのを試してみたい…
ちなみに最後にヒットした行番号を抜き出します。

パイプの使い方がいまいちわからん…このコマンドだと最後の行の文章まで引き出してしまう
181名無しさん@お腹いっぱい。:2014/07/19(土) 14:50:17.23
>>180
最後にヒットした行番号かよ
ほれ↓

awk '/ある文字列/{t=NR}END{print t}' ファイル
182名無しさん@お腹いっぱい。:2014/07/19(土) 14:56:32.05
>>181
.なんでそんなに分かるんだwww
ありがとうございます。
183名無しさん@お腹いっぱい。:2014/07/19(土) 15:38:14.87
手元に何らかのUnix系環境あると楽だぞ
UnixやBSD、LinuxやMacを使ってるならそこで色々試せばいいし
Windowsでも、ちょっとお試し程度ならCygwinでも問題ない
ただCygwin独自の問題もあること考えると仮想マシンにUnix系の環境あると便利
184名無しさん@お腹いっぱい。:2014/07/19(土) 15:51:10.13
知らない間に、レス数が増えてるな。なんか、反応が早すぎるよね

>>174 出遅れたけど一応 sed
sed -e '=' "$filename" | sed -n 'N; /'"$regex"'/{ s/\n.*//; h }; ${x; p}'

そして、>>180 のを直してみた
grep -n "$regex" "$filename" | tail -n 1 | cut -d : -f 1
185名無しさん@お腹いっぱい。:2014/07/19(土) 21:46:32.14
>>181
もしよろしければなぜそうなるか教えていただきたい…
私が作成したコマンド含めて…
186名無しさん@お腹いっぱい。:2014/07/19(土) 23:51:41.96
書いた人じゃないが
awk '/ある文字列/{t=NR}END{print t}' ファイル
ある文字列 にマッチすると、その行の行番号をtに保存する
END(つまりすべての行読み込みが終わった後)に最後にtに保存された行番号を表示する
187名無しさん@お腹いっぱい。:2014/07/20(日) 06:34:00.38
>>186
あ、なるほど。
説明さんくす!
188名無しさん@お腹いっぱい。:2014/07/20(日) 07:00:55.80
NRはNumber of Recordとかそんな感じの変数。
189名無しさん@お腹いっぱい。:2014/07/20(日) 19:48:31.71
テキスト中に現れる<text:s c="n"/>のような文字列を
n個の半角スペースに置き換えるにはどうすればいいでしょうか
たとえば<text:s c="23"/>だったら、半角スペース23個に置き換えられるとうれしいのですが
190名無しさん@お腹いっぱい。:2014/07/20(日) 22:09:44.57
>>189
これもawk案件かな。
改行が入ってたりはしないんだな?
191名無しさん@お腹いっぱい。:2014/07/20(日) 22:49:16.40
>>189
全ての行をechoで出力するように置換して、
該当の部分を`printf %23s " "`に置換、
それらを評価してテキストを出力する。

この方法は元のテキストで、shが解釈する文字をどの程度使ってるかでコストが変わる。
192名無しさん@お腹いっぱい。:2014/07/20(日) 23:03:44.63
>>189,190
とりあえずやっつけで、、、

$ cat hoge.txt | awk '{if(match($0, /^(.*)<text:s +c="([0-9]+)"\/>(.*)$/, m)){printf("%s%" m[2] "s%s\n", m[1], " ", m[3])}else{print}}'

これは <text:s〜> が同一行に複数あったらダメだな。。。
誰かもっとスマートな方法をお願い
193名無しさん@お腹いっぱい。:2014/07/20(日) 23:34:45.34
Perl なら一行で…

$ cat hoge.txt | perl -pe 's@<text:s +c="(\d+)"/>@sprintf("%$1s", " ")@ge'
194名無しさん@お腹いっぱい。:2014/07/21(月) 00:03:55.79
ついにperlさんが活躍するのか
sedで頑張ろうと思ったがどうやっても複雑になるからあきらめた
前スレに出てたスクリプトを出力するスクリプトを書けばって気はするが、作り方が分からん……
195名無しさん@お腹いっぱい。:2014/07/21(月) 05:24:03.35
>>190,195
192だが、やってみたらこうなった。
$ cat in.xml|sed -e "s/^\(.*\)\$/echo '\1'/" -e 's|<text:s c="\([0-9]\+\)"/>|'\''"$(printf "%\1s" " ")"'\''|g'|while read;do eval $REPLY;done
printf埋め込むまわりのクォートがわけわからんことに。
こんな感じのを作ってる。入力にシングルクォートがあったら終わりかな。
eval echo '<?xml version="1.0"?>'
eval echo ' <p>'"$(printf "%10s" " ")"'</p>'
196名無しさん@お腹いっぱい。:2014/07/21(月) 06:28:07.01
sed で2通り。2番目は、長いです
1. POSIX shell and GNU sed
#!/bin/sh
ReTag1='<text:s +c="'
ReTag2='"/>'

sed -re '
 : Loop
  s@^(.*)'"${ReTag1}"'([0-9]+)'"${ReTag2}"'(.*)$@echo '\''\1'\''"$( printf "%\2s" " " )"'\''\3'\''@e
 t Loop
'
197名無しさん@お腹いっぱい。:2014/07/21(月) 06:29:23.32
2. 連投失礼します
ReTag1='<text:s \{1,\}c="'
ReTag2='"/>'

sed -e '
# using: unix.stackexchange.com/questions/36949/ the answer of Simon Richte
: Loop1
\@'"${ReTag1}"'[0-9]\{1,\}'"${ReTag2}"'@ {
: Loop2
s@\('"${ReTag1}"'[ <]*\)0\([0-9]*'"${ReTag2}"'\)@\1<\2@
s@\('"${ReTag1}"'[ <]*\)1\([0-9]*'"${ReTag2}"'\)@\1< \2@
s@\('"${ReTag1}"'[ <]*\)2\([0-9]*'"${ReTag2}"'\)@\1< \2@
s@\('"${ReTag1}"'[ <]*\)3\([0-9]*'"${ReTag2}"'\)@\1< \2@
s@\('"${ReTag1}"'[ <]*\)4\([0-9]*'"${ReTag2}"'\)@\1< \2@
s@\('"${ReTag1}"'[ <]*\)5\([0-9]*'"${ReTag2}"'\)@\1< \2@
s@\('"${ReTag1}"'[ <]*\)6\([0-9]*'"${ReTag2}"'\)@\1< \2@
s@\('"${ReTag1}"'[ <]*\)7\([0-9]*'"${ReTag2}"'\)@\1< \2@
s@\('"${ReTag1}"'[ <]*\)8\([0-9]*'"${ReTag2}"'\)@\1< \2@
s@\('"${ReTag1}"'[ <]*\)9\([0-9]*'"${ReTag2}"'\)@\1< \2@
t Loop2
198197 の続き:2014/07/21(月) 06:31:35.30
  : Loop3
   s@\('"${ReTag1}"'< *\) <\([ <]*'"${ReTag2}"'\)@\1< \2@
   t Loop3
  
   s@'"${ReTag1}"'<*\( *\)'"${ReTag2}"'@\1@g
 }
 t Loop1
'
197 のインデントを置換するのを忘れた
199名無しさん@お腹いっぱい。:2014/07/21(月) 06:38:37.60
197 ですが、@\1<数字分の半角スペース\2@ で置換します
連続した半角スペースが、1つになってしまったので、読み替えて下さい
200189:2014/07/21(月) 11:38:36.49
>>189です。みなさんありがとうございます。
いただいたどの案でも目的を達することができました。
201189:2014/07/21(月) 11:39:16.74
>>191
printfを使うというのは目からウロコでした。
ある文字を指定された回数だけ出力する(expand?のような、あるいはBASICの
STRING?のような)コマンドを探したりしていたのですが見つからず…
202189:2014/07/21(月) 11:40:06.63
>>190,192
できました。同一行に複数ある場合ですが、ちょっと後出しみたいで申し訳ないのですが、
入力をあらかじめタグの切れ目で改行しておけばよいので全然問題ないです。
203189:2014/07/21(月) 11:40:55.78
>>193
ううむ、簡潔ですね。さすがperlです。sedやawkでだめならperlかなと思っていたので
そのものズバリの回答ありがたくいただきました。
204189:2014/07/21(月) 11:41:42.39
>>195
ご明察のとおり元のテキストファイルはxmlファイルで、
OpenOffice Writerの文書ファイルからcontent.xmlを取り出したものです。
evalを使ったスクリプト、期待どおり動作しました。入力中にシングルクォートは
ありませんでしたが、アスタリスクがあって、ちょっと副作用出ました。
この辺が>>191さんのおっしゃるコストでしょうか。
205189:2014/07/21(月) 11:42:20.07
>>196
GNU sedだとeコマンドが使えるのですね。ループの使い方とあわせてとても勉強になりました。

>>197-199
うーん、そういう方法があったか!と唸ってしまいました。
元記事Simon Richterさんのsedで加減の演算を実装してしまう方法はとてもマニアックですが
sedでもここまでできるという見本のような使い方だと思いました。
206189:2014/07/21(月) 11:47:24.63
上にもちょっと書きましたが、入力ファイルはOpenOffice Writerの.odtファイルに含まれているcontent.xmlで、
unzip -qq -c document.odt content.xml | sed -e 's,<[^>]\+>,,g'
このような感じのフィルタスクリプトでxmlタグを取り除いてやると、元の文書のうち文字情報だけを
取り出すことができるので、これを~/.lessfilterに登録しておけばlessでファイルの内容をさっと確認
できるなと思ったのが出発点です。

しかし複数のスペースが入力されているところは<text:s text:c="n">(すみません、正しくはこうでした)
のようにxmlの記法?でまとめられてしまっていて、これがsedでは(というか自分の力量では)
うまく変換できなかったので、質問させていただいた次第です。
207名無しさん@お腹いっぱい。:2014/07/21(月) 12:59:04.26
xmlなんだからパーサーに食わせればいいと思う。
208名無しさん@お腹いっぱい。:2014/07/21(月) 13:30:11.09
パーサー使っていいならodt2txtもありになってしまうじゃん
あくまで標準的なコマンドでやりたかったんじゃないの?
209名無しさん@お腹いっぱい。:2014/07/21(月) 13:31:59.53
>>204
>>195だけど、evalは危険なので気をつけて下さいね。何らかの方法で任意のコマンドが実行できるかも知れない。

>>207
xmlstarletでやろうとしたけど挫折した。純粋なxsltなら出来そうだけど。
210名無しさん@お腹いっぱい。:2014/07/21(月) 13:40:58.27
>>208
時間の無駄。
XMLパーサの再発明(しかも超劣化版)してどうするの?
211名無しさん@お腹いっぱい。:2014/07/21(月) 14:10:56.03
別にパーサでやるのも、あくまでシェルスクリプトでやるのもアリでしょ。
そこの議論やるより、スクリプトを書いたほうが建設的。
212名無しさん@お腹いっぱい。:2014/07/21(月) 14:18:33.58
>>210
なんでも使える環境で作業してるなら Perl でも Python でも Ruby でも使えば良いじゃん
なんでこのスレいるの?
213名無しさん@お腹いっぱい。:2014/07/21(月) 18:39:51.57
最近は>>189みたいにxslt使うまでもないのは
s.split(/<(^[>]+)>/m).forEach
みたいな感じでnode.jsだな 改行入っててもOKだし
214名無しさん@お腹いっぱい。:2014/07/21(月) 22:19:23.30
今回はperlさんが最適解っぽいな
しかしawkで>>192のようなやり方があるとは
matchの3つ目の引数使って後方参照出来るってことだよな?
これは使いこなすと強そうだ
215名無しさん@お腹いっぱい。:2014/07/21(月) 22:55:42.90
gawk限定でもいいのかっていうのはこのスレではやや気になる。
自分だけなら好きなように使うけど(特にgawk4.0以降の多次元配列)。
216名無しさん@お腹いっぱい。:2014/07/21(月) 23:04:16.52
pythonやrubyは?
217名無しさん@お腹いっぱい。:2014/07/22(火) 01:25:48.78
#!gwak
と書いて置けばいいさ
218名無しさん@お腹いっぱい。:2014/07/22(火) 02:03:04.51
>>217
一行目からtypoってのはせつない。
219名無しさん@お腹いっぱい。:2014/07/22(火) 02:19:18.56
shebang行に相対パスは環境依存…とかそれ以前にグワック
220名無しさん@お腹いっぱい。:2014/07/22(火) 14:57:15.09
空白の行を取り除くとして、方法が何通りかあると思うんですけど
どんな方法がありますか?また一般的な方法はどれですか?
221名無しさん@お腹いっぱい。:2014/07/22(火) 15:00:37.53
>>220
grep -v ^$
空行ならこうだけど、空白の行なら'^ \+$'かな。
222名無しさん@お腹いっぱい。:2014/07/22(火) 15:54:13.53
「空白行を取り除く」という言葉を重視するなら sed かな
223名無しさん@お腹いっぱい。:2014/07/22(火) 16:03:13.55
tr -s \\n #空行を取り除く
224名無しさん@お腹いっぱい。:2014/07/22(火) 16:09:28.69
質問は空行じゃなくて空白行。
225名無しさん@お腹いっぱい。:2014/07/22(火) 16:14:47.98
空白行と空行ってなにか違うんですか?
226名無しさん@お腹いっぱい。:2014/07/22(火) 16:20:14.87
空行は何もない行。
空白行は空白のみがある行。
227名無しさん@お腹いっぱい。:2014/07/22(火) 16:31:35.12
s/\n+/\n/m
228名無しさん@お腹いっぱい。:2014/07/22(火) 16:32:18.04
s/\n\s*\n/\n/m
229名無しさん@お腹いっぱい。:2014/07/22(火) 16:35:12.21
それじゃ答えになってない。
230名無しさん@お腹いっぱい。:2014/07/22(火) 16:39:33.57
sed様のお手を煩わすまでもない、
お前など、このgrepが排除してやるわ

# 仕様後出しアタック

grepを倒したからと言っていい気になるなよ
奴は正規表現四天王の中でも最弱

ここまで妄想した。
231名無しさん@お腹いっぱい。:2014/07/22(火) 16:42:45.97
>>227
>>228
/^ \+$/d

sだけがsedではない。
232名無しさん@お腹いっぱい。:2014/07/22(火) 16:49:27.94
>>227>>228はsedとは言ってない。
233名無しさん@お腹いっぱい。:2014/07/22(火) 18:57:35.09
汎用性を考慮して行頭、行末、行頭と行末の空白文字を取り除くスクリプトを用意
#!/bin/sh
progname=`basename $0`
case $progname in
ltrim) sed -e 's/^[[:space:]]\+//g' "$@" ;;
rtrim) sed -e 's/[[:space:]]\+$//g' "$@" ;;
lrtrim) sed -e 's/^[[:space:]]\+//g' -e 's/[[:space:]]\+$//g' "$@" ;;
*) echo "unsupported program name: $0" 1>&2 ; exit 1 ;;
esac

誰かファイル末尾の空行を削除するスクリプト作って
234名無しさん@お腹いっぱい。:2014/07/22(火) 19:48:19.55
少なくとも空行、空白行削除なら
>>221のをちょいとだけいじって
grep -v '^ *$'
でいい気がするんだが
sed使うほどでもないだろうこれ
235名無しさん@お腹いっぱい。:2014/07/22(火) 20:19:58.02
>>226
ちょっとまって。
空白しかないんでしょう?
改行があったらダメじゃん?
でも改行ないと行じゃないよ?
あれ?
236名無しさん@お腹いっぱい。:2014/07/22(火) 20:21:24.69
>>234
仕様後出しアタック

っタブ
237名無しさん@お腹いっぱい。:2014/07/22(火) 20:23:59.82
全角スペースもお願いします。
全角スペースに見える未定義コードもお願いします。
238名無しさん@お腹いっぱい。:2014/07/22(火) 21:19:36.04
>>233 sed でタブと全角スペース込み
unnamed)
 sed -e '
  : Loop
   N
   $ d
  /^[[:space:]\n]*$/ b Loop
 '
;;
239名無しさん@お腹いっぱい。:2014/07/22(火) 21:20:33.95
>>237
お前みたいな曖昧な提案しかできない奴が仕様をまとめるから炎上するんだ
240238:2014/07/22(火) 21:34:16.78
一々言う事でもないけど、"$@" つけ忘れた
こういうミスを、書き込む前に気付く様な人に、いつかなりたい
241名無しさん@お腹いっぱい。:2014/07/22(火) 22:29:32.36
>>234
sedのdコマンドのほうが、意味的に近いかなと思うんよね
grepはどうしても「抽出する」イメージが強いコマンドだし
242名無しさん@お腹いっぱい。:2014/07/22(火) 22:30:45.89
>>237
[[:space:]]
これの対象にならないならもうだめぽ
243名無しさん@お腹いっぱい。:2014/07/22(火) 22:35:40.42
sedっていうとどうも編集役っていう先行イメージがな。置換とか
行の一部を編集ならsed、行丸ごと処理ならgrepだと勝手に思ってる
同じ処理ならgrepのほうが高速に動く……多分
244名無しさん@お腹いっぱい。:2014/07/22(火) 22:40:11.60
>>237
バカには見えない文字があるので仕様通りです。
245233:2014/07/22(火) 23:00:49.86
>>238
おお、さっそく作ってくださってありがとうございます。
tac と組み合わせればファイル先頭の空行も取り除くことができるので願ったり叶ったりです。

自分も早くパターンスペースやホールドスペース、ループを自在に操れるようになりたいです。
246名無しさん@お腹いっぱい。:2014/07/23(水) 10:33:53.58
具体的な話しじゃないけど
無印良品のデータベースって市販の管理ソフトだと
効率が悪いんで、txtベースで資料を造ってボーンシェルかなにかで
検索システム造ったと聞いたが、cat|grepとかだったのかな。
247名無しさん@お腹いっぱい。:2014/07/23(水) 10:45:35.15
>>246
話があやふやだな。
ぐぐればすぐソース出てくるじゃん。
http://www.atmarkit.co.jp/news/200909/07/lltv03.html

> cat|grepとかだったのかな。
UUOC
248名無しさん@お腹いっぱい。:2014/07/23(水) 11:47:14.88
>>247
ありがとう。
ググルよりオマエに頼ってオマエを愛したい。
249247:2014/07/23(水) 11:49:25.56
やだよ気持ち悪い。
250名無しさん@お腹いっぱい。:2014/07/23(水) 12:35:21.83
>>230 >>248-249 笑った。四天王の中でも最弱とか、よく出てきそうなフレーズだなあ
と思って調べると、有名なネタですか

先頭の空行のも書いてみました。正規表現で2回走査する所がいまいちですが
unnamed2)
sed -e '
 0, /[^[:space:]]/ {
  /[^[:space:]]/! d
 }
'
;;

[ここか[:space:]ここに]
空白文字を足せば解決の様な気がしますが、落とし穴?
251名無しさん@お腹いっぱい。:2014/07/23(水) 18:59:04.95
>>236
grep -v '^[[:space:]]*$'
ちょっと苦しいか
252名無しさん@お腹いっぱい。:2014/07/23(水) 23:57:04.71
>>250
ファイル先頭の空行を削除するスクリプトありがとうございます。
アドレス0の使い方を学びました!
253名無しさん@お腹いっぱい。:2014/07/24(木) 13:40:13.62
>>193
Perl は 'x' で文字列のリピートができるのか… '*' じゃないんだな

$ cat hoge.txt | perl -pe 's@<text:s +c="(\d+)"/>@" " x $1@ge'
254名無しさん@お腹いっぱい。:2014/07/24(木) 13:43:45.55
catが無駄です
255名無しさん@お腹いっぱい。:2014/07/24(木) 13:49:57.72
cat始まりとか割とよくやるよな。
最初だけcurl $url|tee cache|した時とか特に。
256名無しさん@お腹いっぱい。:2014/07/24(木) 13:55:08.80
cat始まりで実行するのは素人。
コマンドライン上、ファイルを最初に書きたいなら、

< file script > outfile

ってやればいいだけ。catもパイプも要らん。
257名無しさん@お腹いっぱい。:2014/07/24(木) 13:57:57.68
問題:この話題は過去何回目でしょう?
258名無しさん@お腹いっぱい。:2014/07/24(木) 14:22:21.45
スクリプトではなく対話のシェルに打ち込むなら
ネコを使っておいた方がヒストリを検索するときに
まとまっていて楽w
259名無しさん@お腹いっぱい。:2014/07/24(木) 15:05:56.09
>>254
そのツッコミが無駄
260名無しさん@お腹いっぱい。:2014/07/24(木) 15:55:01.75
>>256
なるべくなら少ない方法を使い回したい。
あと入力がgzのものがあって、zcatに置き換えるのはありがち。
261名無しさん@お腹いっぱい。:2014/07/24(木) 18:41:09.48
おれも最初に cat するクセがあったんだけど、以前このスレで違いを教わってやめた

cat するのとしないのとの、実行時間の違い
対象ファイルは DVD 版 KNOPPIX にあるファイル KNOPPIX (ややこしいな)

$ du -h KNOPPIX
4.0G KNOPPIX

$ time bash -c 'tail KNOPPIX > /dev/null'
real 0m1.811s
user 0m0.000s
sys 0m0.004s

$ time bash -c '< KNOPPIX tail > /dev/null'
real 0m0.182s
user 0m0.000s
sys 0m0.004s

$ time bash -c 'cat KNOPPIX | tail > /dev/null'
real 9m6.519s
user 0m4.148s
sys 0m28.584s
262名無しさん@お腹いっぱい。:2014/07/24(木) 19:05:01.60
そんな差あったのか
パラメータにファイル指定するより標準入力に突っ込んだほうが早いというのは知らなかった
俺も今後は控えよう
263名無しさん@お腹いっぱい。:2014/07/24(木) 19:19:08.09
その例は・・・w
catの次が標準入力を先頭から普通に読むタイプのフィルタならそこまで差はつかないと違う?
tailはちょっと特殊な読み方をするんじゃないのかな
264名無しさん@お腹いっぱい。:2014/07/24(木) 19:39:35.46
じゃあ、tailの代わりに wc -c でどぞ。 -c も付けるんだぞ。
265名無しさん@お腹いっぱい。:2014/07/24(木) 19:56:43.08
>>261の3番目だけは遅いブロックデバイスへのブロックリードが大量に発生するんだよね
catが全部読んでtailに渡しながら、tailは先頭から改行カウントするしかないからね
その結果I/O待ちのidle時間が膨大になる

1番目と2番目はtailがKNOPPIXのファイル記述子を直接得られるので、seekして後ろの方から読んで改行を探せる
その結果ブロックリードの量が激減するので時間がかからない

まあtailの特殊事情だから、wc -cならここまで差はつかないだろう
266名無しさん@お腹いっぱい。:2014/07/24(木) 20:00:30.78
>>265
wc -c こそ大差がつくんだが、、
267名無しさん@お腹いっぱい。:2014/07/24(木) 20:09:45.96
ほう。wc -c の方が大差がつくとなると何か自分が知らない仕組みがあるのかなあ?
とても興味があります
268名無しさん@お腹いっぱい。:2014/07/24(木) 20:17:46.27
おお。たしかに差がでるなあ?なんでcat通したwcはこんな遅いんだ?
269名無しさん@お腹いっぱい。:2014/07/24(木) 20:19:56.37
並列化が云々
270名無しさん@お腹いっぱい。:2014/07/24(木) 20:24:59.10
ああ、なるほどwそりゃそうだw
wc -cだとデータの中身は見なくていいのね
だからファイル記述子が直接得られりゃ、即効で終われるのか
271名無しさん@お腹いっぱい。
「cat file|」だと後段の入力はパイプだけど、「<file 」だと後段の入力はファイルになるんだっけ。
大抵は大丈夫だけど、物によっては動作自体異なる場合もあるのかな。

>>261>>262
2つ目ってキャッシュ効いてたりしないよな?