板検索:
シェルスクリプト総合 その24 (999)
まとめビュー
1
名無しさん@お腹いっぱい。[sageteoff]   投稿日:2014/11/11 00:54:03
シェルスクリプトの総合スレです。
□お約束
・特記なき場合は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に逃げずにシェルスクリプトで処理するのが頭のいいやり方。
前スレ
シェルスクリプト総合 その23


2
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/11 01:00:47
乙です

3
テンプレ ◆01VkPKFOHeoR [sage]   投稿日:2014/11/11 03:40:09
ああ、次スレをいつ立てようかとタイミングを見ていたが
次スレ立ったか...

一応前スレでテンプレ書いた手前、書き込んでおきます

4
テンプレ ◆01VkPKFOHeoR [sage]   投稿日:2014/11/11 03:41:35
シェルスクリプトの総合スレです。
初心者、学生、アマチュア、プロ、シェルの種類や OS を問いません。
スクリプトのお勉強・自慢・腕試しなどにどうぞ。
まずはテンプレートをご覧下さい。

□A. お約束
1. 特記なき場合は #!/bin/sh がデフォルトです。この場合可搬性に注意し、
 Traditional Bourne Shell もしくは、POSIX 相当のスクリプトでお願いします。
 bash / zsh / ksh / ash / dash や OS 等に依存する場合は、明示しましょう。
 良く分からない方は、使用している OS を書いておけば OK です。是非ご参加下さい。
2. 質問する前に、まず自分で調べましょう。ただし、
 「聞くは一時の恥、聞かぬは一生の恥」です。積極的に参加しましょう。
3. 相手を侮辱する発言、失礼な発言は差し控え、知的な議論を楽しみましょう。
4. 他者には様々な環境や事情、目的が有る事に留意し、無下に扱う様な発言は
 控えましょう。

□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 参照 )

5
テンプレ ◆01VkPKFOHeoR [sage]   投稿日:2014/11/11 03:42:31
□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
9. cat file|すんなハゲ
 a. 詳細は "Useless Use of Cat" UUOC で検索して下さい
 b. 有用な場合も有ります Useful use of cat(1) 英文
  http://www.in-ulm.de/~mascheck/various/uuoc/

□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

6
テンプレ ◆01VkPKFOHeoR [sage]   投稿日:2014/11/11 03:43:24
□E. 学習用テキスト
1. Bourne Shell自習テキスト ( 1993年 ) pdf お薦め
 http://lagendra.s.kanazawa-u.ac.jp/ogurisu/manuals/sh-text/sh/
 http://ayapin.film.s.dendai.ac.jp/~matuda/Lecture/PDF/sh-two.pdf
2. シェルを使おう - 導入からプログラミングまで - ( 2002年 )
 http://www.netfort.gr.jp/~tomokuni/lms/shell/
3. UNIX FAQ LIST
 http://www.nurs.or.jp/~asada/FAQ/UNIX/UNIX.FAQ.html

□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件

7
テンプレ ◆01VkPKFOHeoR [sage]   投稿日:2014/11/11 03:44:12
2. POSIX
 The Open Group Base Specifications Issue 7 IEEE Std 1003.1, 2013 Edition 英文
 http://pubs.opengroup.org/onlinepubs/9699919799/
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/
 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/

8
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/11 03:45:49
6. ツール
 a. web tool です。Vim syntastic や Emacs の Flycheck でも使えます
  ShellCheck
  http://www.shellcheck.net/about.html
 b. vim 用 syntastic
  https://github.com/scrooloose/syntastic
 c. checkbashisms も使用してチェック duggan/shlint GitHub
  https://github.com/duggan/shlint

□G. 前スレ
1. ☆シェルスクリプトを勉強するにあたって☆
 UNIX板の別スレッドへ
2. 便利なシェルスクリプト見せろ
 UNIX板の別スレッドへ
3. シェルスクリプト総合 その1
 UNIX板の別スレッドへ

中略。検索して下さい

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

9
テンプレ ◆01VkPKFOHeoR [sage]   投稿日:2014/11/11 03:46:48

10
テンプレ ◆01VkPKFOHeoR [sage]   投稿日:2014/11/11 03:47:27
□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 あ、張り切って〜、どうぞ〜! 案じゃ無くてつぶやきでも、どうぞ〜!

11
名無しさん@お腹いっぱい。[]   投稿日:2014/11/12 04:59:38
シャナスクリプトはまだですか?


12
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/12 07:18:57
シャロスクリプトもまだです

13
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/12 13:25:09
そういえば
コート脱いだらハワイのミポリソ萌えスクリプトが
サーバのどっかに転がってたかもなぁw

14
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/12 23:08:52
前スレで長テンプレを提案してた人スレ立ったらテンプレそのままでざまぁwww
とか思ってたらしっかり記載していたでござる

なんか文面の雰囲気変わったな、もっと堅い感じだった気がするが
コメント1件

15
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/13 07:09:24
>14
変えてないけどなあ
意見聞く際になるべく中立、丁寧語で書いたから、そういう印象なのかな?

意見を聞いて了承を得てからという作業は面倒臭かったが
たとえ、その23 以前の短い1レスだけのテンプレのままを、立てる人がコピペするにしても
少なくとも Perl の矛盾した記述だけはなんとかしたい

シェルスクリプト総合 その1 からずっと最近までは
「(Rubyや)awkまたはperlの方が適した処理にはそちらを使いましょう。」だけだった

16
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/16 22:28:48
お勧めの shell を教えて下さい。

ずっと(22年ぐらい) 自宅や学校の FreeBSD上で tcsh を login shell として使ってきましたが、
このスレを読んで、 csh 系スクリプトはお勧めでないことを知りました。

root で作業するときには、 sh も必要なので使いますし、スクリプトも書くのですが
tcsh から sh系に移行できないでいます。

最近は仕事で数値計算をするときのプラットフォームが cygwin になってしまったため、
これを機に 自宅の FreeBSD でも、sh 系を login shell にするように切り替えようかとも思っています。
お勧めを教えて頂けませんでしょうか。

どうぞ宜しくお願い致します。
コメント1件

17
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/16 22:34:23
>16 自己フォローです。

すみません。他に適切と思われるスレを見つけたので、移動します。

おまえら! shell は何を使っているんですか?

お邪魔して申し訳ありませんでした。

18
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/17 00:19:12
お、おう

19
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/17 06:46:29
ログインシェルとスクリプトのシェルを一致させる必要は別にないのになぁ…
コメント1件

20
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/17 08:15:15
ログインシェルはzshでスクリプト書くときはbashかな

21
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/17 08:20:16
ログインシェルもスクリプトもashだ

22
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/17 08:52:41
Bシェル系同士なら一致させなくても良い

23
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/17 14:56:35
スクリプトは ash か dash

24
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/17 22:07:53
z750sh3

25
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/18 13:45:16
shで無駄にがんばる
いやなんとなく続けてるだけか

26
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/18 17:45:34
/bin/sh でがんばっているよ
実体が ash だったり
dash へのリンクだったりするだけでw

27
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/18 17:50:06
がんばるってほどのことかな
スクリプト書く労力は他のシェルでもあんま変わらんでしょ?

28
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/18 18:04:52
ん? ログインシェルを/bin/shで頑張るって話でしょ?
補完なし、ヒストリーなし、aliasなしで。
コメント1件

29
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/18 18:09:15
スクリプトスレだからスクリプト動かす話だよ

30
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/18 18:24:14
>19 の、ログインシェルとスクリプトのシェルを一致させる必要があるかどうか
という話から来てるから、
ログインシェルの話だろ

31
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/19 20:36:46
emacsキーバインドのtcshでログインして、viでashスクリプト書いてるわ。

32
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/20 21:39:29
>28
ashはファイル補完もヒストリー呼び出しもある。
aliasなんてうんこ。functionの方が強力。
コメント1件

33
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/21 05:09:42
>32
それはFreeBSD拡張のashだね。
コメント1件

34
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/21 16:11:47
スレ違いっぽいので何だがw
ログインシェルは zsh

35
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/21 16:14:13
>33
大抵emacsのshell-modeで使うので、ヒストリやコンプリーションは
なくてもそれほど困らない。

36
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/21 19:51:04
もういっそログインシェルをemacsにしろよw

37
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/21 19:58:39
ログインシェルを遊びでviにしてみたことならある。
その状態でログインしたviからシェルエスケープしようとすると
vi変数でshell=vi状態になってるのでシェルのつもりでさらにviが起動されてハマる。

38
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/21 20:28:57
emacsをdisplay managerにしたようなOSがあったな。

39
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/21 20:41:52
Oberon?

40
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/21 20:53:09
apollo domain

41
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/25 12:45:00
for文で空白区切りのリストを後ろからループさせることはできないでしょうか?
下記の例だと「1 2 3」の順で表示されますが、これを「3 2 1」の順で表示させたいです。

VLIST="1 2 3"
for val in $VLIST
do
echo $val
done
コメント1件

42
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/25 13:00:52
>41

VLIST='1 2 3'
for val in `echo "$VLIST" | tac -s ' '`
do
echo "$val"
done
コメント1件

43
41[sage]   投稿日:2014/11/25 13:39:35
>42
すごい!できました。
ありがとうございました!

44
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/25 13:46:29
もう答えが出ちゃってますけど rev コマンドでも行けます

$ for val in $(rev <<< "$VLIST"); do echo $val; done

45
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/25 13:56:09
tac便利、自分も使ってる
コメント1件

46
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/25 13:57:16
>45
revだと、2桁以上の数字の時 数値の桁が入れ替わるので不可。

12 13 14 -> 41 31 21 みたいに
コメント1件

47
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/25 20:47:40
tac 知らなかったが便利そうだ。

48
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/25 21:00:07
良かった。知らないのは俺だけじゃなかったんだなw
GNU 方面は、他にも便利なコマンドがいろいろありそう・・・
(さすがに date コマンドで日付演算できるのは知ってた)

49
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/25 21:25:54
とりあえずcoreutilsに入ってるものは全部覚えておこうぜ
100個ぐらいしかないんだからさ

50
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/25 21:53:35

51
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/26 00:18:13
tac知ってたけど有効な使い道が見いだせないでいた
しかし名前のセンスいいよな

52
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/26 00:36:12
slがtacの仲間だと思って入れた時の脱力感

53
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/26 06:02:33
>46
要素ごとにもっかいrevで

54
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/26 06:28:19
どうせまたBash shockのようにCoreutils shockが起こるんだぜ?
やめておけよw

55
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/26 06:42:34
tac使わずに標準コマンドまたは内部コマンドだけでやれ、というのがいい詰めスクリプト問題になるなぁ。

56
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/26 06:48:48
再帰すればラクショー
コメント1件

57
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/26 06:50:18
VLIST='1 2 3'
t=; for val in $VLIST; do t="$val $t"; done

for val in $t
do
echo "$val"
done
コメント6件

58
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/26 06:51:47
>56 のあとに再帰すら使ってないラクショーな >57 が書き込まれた件について

59
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/26 07:03:58
再帰するならこうか。これ活用しにくい。これなら >57 の方がいい

VLIST='1 2 3'

func()
{
if [ $# -gt 1 ]; then
(shift; func "$@")
fi
echo "$1"
}

func $VLIST
コメント1件

60
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/26 12:51:29
未熟者のオレに>57の動きを教えてくだせえ。。。

61
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/26 12:59:26
set -x してから >57 を実行してみると分かると思う

62
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/26 17:31:45
>57
即レスかっけー!これは濡れるw

63
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/26 19:08:42
>57が正統派に思えてくる
素直で余計なことをしていない
逆転と出力で2回forってるのが気にはなるが

64
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/26 20:30:20
#!/bin/bash

VLIST='1 2 3 4 5'

val=($VLIST)

while [ ${#val[@]} -gt 0 ]; do
echo ${val[${#val[@]}-1]}
unset val[${#val[@]}-1]
done
コメント1件

65
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/26 21:05:02
>64
どうせbash使うなら素直にこうやれよ

#!/bin/bash

VLIST='1 2 3 4 5'
val=($VLIST)

for ((i=${#val[@]}-1; i >= 0; i--)) {
echo ${val[i]}
}

66
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/27 02:55:58
どうせ10個もアイテムないだろうから

VLIST="1 2 3"
set $VLIST
for val in $9 $8 $7 $6 $5 $4 $3 $2 $1
do
echo $val
done

67
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/27 03:03:45
それだったら

echo $9 $8 $7 $6 $5 $4 $3 $2 $1

でええやん…

68
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/27 03:42:20
>59
bash/zsh なら local 変数使ってこんな感じに

function reverse {
local arg="$1"
[ $# -gt 0 ] &&
{ shift; reverse "$@"; echo -n "$arg "; }
}

最後の改行はどうすべぇ…
コメント1件

69
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/27 04:05:50
2段重ねにしてみる

function reverse {
function _reverse {
local arg="$1"
[ $# -gt 0 ] &&
{ shift; _reverse "$@"; echo -n "$arg "; }
}
_reverse "$@" | sed 's/ $/\n/'
}

70
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/27 12:26:34
キモい
もっと綺麗にならんかね
コメント1件

71
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/27 13:33:00
>70
毎日凝視して眺める訳じゃないから
動けばいい、安定してどんな場面でも問題が起こらなければいい。
シェルスクリプトなんてそういうレベルのもの
しょせん手作業の積み上げだからね。

72
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/27 14:14:44
「コードが汚くても安定して動けばいい」なんてのは
他人のコードをメンテしたり機能追加したことのない奴が言うセリフ
コメント1件

73
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/27 14:31:21
継続してメンテしなきゃいけないスクリプトもあるし
一回動けばそれでいい使い捨てのスクリプトもある
それだけの話っしょ

74
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/27 14:32:04
>68,69 は再帰を知っていれば分かりやすいと思うけどなぁ

75
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/27 14:43:04
再起知らないプログラマなんて存在しないだろ

76
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/27 15:06:22
>72
自分しか使わないマシンでも他人にメンテをお願いする
前提で書かないとならないのかい?
むしろメンテ側の人間には全く関係ない話しなんだが。
コメント1件

77
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/27 15:08:35
>76
一ヶ月前の自分は他人と思えって諺があってだな
個人的には自分のコードを汚く書いてしまったせいで泣くはめになったことも良くある
コメント1件

78
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/27 15:12:04
いくらか使いこなせるようになったPerlerによくあった

79
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/27 15:23:18
>77
良い師匠に巡り会ったじゃない。
もし1ヶ月前の自分が完全無欠なら精進の可能性を断たれるな。

80
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/27 17:23:22
数年前にキレイに書いたつもりのスクリプトでもメンテ(改造)めんどいお
コメント1件

81
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/27 17:40:12
保身のため、コードはなるべく汚く、自分しか読めないように書くこと。リストラ対策。
コメント1件

82
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/27 18:27:07
それは辞めたくなったときに困る
コメント1件

83
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/27 19:50:57
>81から>82でなんか笑った

84
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/28 00:13:06
>80
書いた「つもり」だからだろ

85
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/28 00:35:46
数年たちゃ腕もあがるだろうから当時の綺麗でも今の汚いなんだろうな

86
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/28 05:41:19
こういっちゃなんだが何年経とうが、何日経とうが
シェルスクリプトに問題が出て治す必要があるなら
最初から書いた方が良いよ、、その時の実力で
最良のものが書ける。
1度書いた流れなら数年経っても頭に残ってるから
高速で仕上がるし、できた物を比べても大した違いは無い事も多い。

駆け出しの頃の書き物はまったく変わるのかもしれないが
それはそれで、全く変わらないと困るだろ。
過去の駄作に手をいれてジタバタしたって無駄
コメント1件

87
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/28 08:44:15
使い捨てのつもりだったのに、長期にわたって使われた上に
「これこういう風に変えられない?」とか言われて白目になったことはある。
もちろん一般化できる話じゃないとは思うけど。

88
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/28 12:08:04
改行って^Mですよね?
echo "1^M2"で2しか表示されません何故ですか?
echo "1\r2"もそうでした
echo "1\n2"はちゃんと改行されて1と2が表示されました

^M \r \nってどう使い分けるものですか?

^MはCTRL+V CTRL+Mで入力しました

89
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/28 12:22:58
\rと^Mは同じでCR。
\nと^Jは同じでLF。
CRとLFの違いは自分で調べろ。

90
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/28 12:35:54
CRはコンデンサと抵抗による時定数回路、
LFは低周波であることはわかりましたが、
そこから先がわかりません、よろしく女教授ください。
コメント1件

91
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/28 12:50:56
>90
CRとLFやタブストップなどは
機械式タイプライター由来なので、一度現物を見れば忘れない
ヤフオクで1000円くらいで手に入るから買ってみるといいよ
私女だけど

92
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/28 13:03:16
Macのテキストファイルの改行コードは CR ひとつなんだっけ
コメント1件

93
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/28 13:54:56
OSによって開業コード違いますよね。
Linuxは0xJで改行、BSDは0xMで改行しますよね。
どうしてこういう違いができたんでしょう?
簡単に返還する方法はありますか?
コメント2件

94
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/28 14:34:44
dos2ux
これってHP依存コマンドだっけ?

95
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/28 14:46:02
>93
ある
ちょっとは調べろよ
コメント1件

96
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/28 15:13:15
>95
改変コピペにかまうな

97
88[sage]   投稿日:2014/11/28 20:10:29
CRだと最後の文字しか表示しないってことですか?
例えば
a<CR>
b<CR>
だったらbしか表示されないってことですか?

98
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/28 20:11:01
aを表示した後に行頭に戻ってbを表示している

99
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/28 20:12:58

100
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/28 20:20:08
CRだとQを上げられないから、ボルフォロで正帰還かけるか、LCRにするべきだな。

101
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/28 20:30:52
>92
組み込みでもCR改行の場合がある。
LFで良いだろうぜぇ…といつも思うわ

102
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/28 21:00:51
なんでこんな反応してんの?
コメント3件

103
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/28 21:47:52
反応したら行けない理由は?
>102に許可が射るのか?

104
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/28 22:03:40
改行コードは初心者のころに誰でも一度は通る道だからねえ
その次に通る道はBOM…だったけど最近はWindows触ってないから今どうなってるのか分からん

105
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/28 22:38:41
>102
こんな反応じゃダメ?

106
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/28 23:06:22
少し前に某サイトの解析スクリプト作ったときちょっと改行が面倒だった
HTMLはWindowsで作ってるらしくgrepとsedで抽出したあとCRのごみがついてることに気がついた
なのでCR削除したんだけどsambaで共有してるディレクトリに置いていたファイルを
メモ帳で開くことがあってまたぐちゃぐちゃに、まあTeraPadとかで開けばいいんだけど
環境に依存してしまうので再度CRくっ付けて解決したな

107
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/28 23:11:48
改行法師ンフフ

108
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/28 23:48:34
Macの標準がCRなんだよね

109
102[sage]   投稿日:2014/11/29 00:39:08
質問内容稚拙だったり、回答後に更に質問したり、
そのあたりから定期的に張られる改変コピペだろうと思っただけなんだが
今回やたらみんな親切だから気になっただけだ
コメント1件

110
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/29 00:48:29
いまのとこ改変コピペっぽいのは>93だけだな

111
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/29 01:05:04
改変コピペって・・・いつもこのスレに張り付いてんのかよ

112
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/29 01:37:27
$ echo "1\r2"
1\r2
コメント2件

113
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/29 01:49:55
$ echo -e "1\r2"

114
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/29 01:50:33
$ echo $'1\r2'
コメント1件

115
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/29 06:46:31
>109
おそらくいつものコピペ荒らし
Vim Part24
コメント2件

116
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/29 09:29:20
>115
その後誘導されてこっちに移動してきた

117
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/29 10:00:47
誘導も移動も自作自演

118
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/29 10:56:38
たぶんVimスレで誘導した奴==>102==>115

119
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/29 11:00:44
>112-114
これいやらしくて自分も引っかかったんだけど
>112はshで目的の動作をしてbashだとだめなんだよな
自分はシェルがbashでスクリプトはshなんだけど
実行結果が違うから引っかかって結構悩んだ
コメント1件

120
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/29 12:05:12
ひどい言いがかりだ

121
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/29 12:07:01
まだbashなんか使ってたのかよw

122
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/29 12:12:50
鉄腕bash

123
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/29 12:27:45
大腕硬爆衝

124
名無しさん@お腹いっぱい。[sage]   投稿日:2014/11/29 13:00:19

125
名無しさん@お腹いっぱい。[sage]   投稿日:2014/12/04 14:50:44
Xpath形式のデータを整形式にするスクリプト知りませんか?

126
名無しさん@お腹いっぱい。[sage]   投稿日:2014/12/05 07:55:18

127
名無しさん@お腹いっぱい。[sage]   投稿日:2014/12/07 12:25:15
1点ご質問させてください。
現在下記のようなシェルスクリプトを書いています。

trap 'echo "ERROR!!" ; exit 1' ERR

hoge 2>&amp;1 | tee test.log
hoge2 2>&amp;1 | tee test.log
hoge3 2>&amp;1 | tee test.log
hoge4 2>&amp;1 | tee test.log

コマンド結果の標準出力と標準エラー出力の両方を
ログファイルに残したいのですが
この場合、最初のコマンドで戻り値に1が返されても
次のteeコマンドで戻り値が0になってしまうため
trapで適切にエラーハンドリングできない状態です。

pipestatus使えば何とかなりそうなのですが
その場合コマンドを実行するたびにif文で
pipestatusを評価する必要があるため、冗長に感じてしまいます。

そのためもしより良い解決方法がありましたらご教授いただけませんか。
コメント3件

128
名無しさん@お腹いっぱい。[sage]   投稿日:2014/12/07 12:45:10
function にしてみるとか

err_and_exit () {
trap 'echo "ERROR!!" ; exit 1' ERR
eval "$@"
}

err_and_exit 'hoge' 2>&1 | tee test.log
コメント1件

129
名無しさん@お腹いっぱい。[sage]   投稿日:2014/12/07 13:35:25
>127
全部まとめて tee して、コマンドは &amp;&amp; でつなげばエラーがあれば途中で打ち切ってくれるよ。

( hoge &amp;&amp; hoge2 &amp;&amp; hoge3 &amp;&amp; hoge ) 2>&amp;1 | tee test.log
コメント1件

130
129[sage]   投稿日:2014/12/07 13:37:42
amp化けやだー 全角&で書き直すわ

( hoge && hoge2 && hoge3 && hoge4 ) 2>&1 | tee test.log

131
名無しさん@お腹いっぱい。[sage]   投稿日:2014/12/07 17:01:01
set -eじゃダメなのか?
コメント1件

132
名無しさん@お腹いっぱい。[sage]   投稿日:2014/12/07 17:03:41
>127
#!/bin/bash
exec > >(tee test.log) 2>&1
trap 'echo "ERROR!!" ; exit 1' ERR
hoge
hoge2
hoge3
hoge4
コメント1件

133
名無しさん@お腹いっぱい。[sage]   投稿日:2014/12/07 17:16:16
>131

set -e
false | true

echo 'set -e してもパイプ下流が真だと終了しないよw'

134
名無しさん@お腹いっぱい。[sage]   投稿日:2014/12/07 21:22:56
>128>129>132
お礼が遅くなりましたが、ご回答ありがとうございました。
今回用途としてはコマンドを実行してエラーが発生した段階で
スクリプトを終了させたかったため、下記のような記述に変更しました。

(hoge && hoge2 && hoge3 && hoge4 ) 2>&1 | tee test.log
[ ${PIPESTATUS[0]} - ne 0 ] && exit 1

hoge5
hoge6

>127と比べると「tee test.log」の重複した記述もなくなったので
少しすっきりしたように感じます。
良い解決方法を教えていただき、ありがとうございました。

135
名無しさん@お腹いっぱい。[sage]   投稿日:2014/12/11 09:38:51
>86
なんだか勇気づけられた
ありがとう

136
名無しさん@お腹いっぱい。[]   投稿日:2014/12/12 12:07:03
もう1週間も悩んでいるのに解決せず、ぜひ皆さんのお知恵を
かしてください。

テキストの処理で、数千kBほどのテキストファイルをスクリプト
で処理したいと思っています。環境はCENTOS6.5(i686,32ビット)
で、シェルはBASHです。

シェルスクリプトの最初の方で得られた変数があり、これは動的に変化
します。
START="`grep start`"(←実際はgrepのあとにも処理あり)
END="`grep end`"
二つには行番号が入っており、これをsedのアドレスの指定に使って
START行からEND行までを削除させたいのです。この段階でデバグ
のため、START、ENDともスクリプト途中にechoで表示させて値が
きちんと入っているのを確認しています。

具体的には
sed -e "$START,$ENDd" /dir/file
を実行させても、sedは「,」が未知のコマンドです、と言ってき
ます。
sed -e "${START},${END}d" /dir/file
でも
sed -e '"${START}","${END}"d' /dir/file
でも駄目でした。sedが$を最終行と勘違いしているのかと
sed -e "\$START,\$ENDd" /dir/file
としてみても、これも駄目でした。

そもそも、sedのパラメータには変数は使えないのでしょうか?
同じ事がスクリプト中でできれば、sedでなくても構いませんが。
他におもいつきません。
ネットを検索すると、sedの置換(sed 's/$A/$B/'とか)ではそ
ういう例もあるようですが。よろしくお願いします。
コメント4件

137
名無しさん@お腹いっぱい。[sage]   投稿日:2014/12/12 12:30:40
>136

sed ${START},${END}d /dir/file

で行けるよ。

変数 START ENDに余分なスペースが入ってないか注意。
スペース取るには、

START=`echo $START`
END=`echo $ECHO`
で、代入し直す。
コメント1件

138
名無しさん@お腹いっぱい。[sage]   投稿日:2014/12/12 12:34:18
ダブルクォートで囲っちゃえばいいんじゃない

sed "${START},${END}d" /dir/file

139
名無しさん@お腹いっぱい。[sage]   投稿日:2014/12/12 12:39:48
START=1
END=2

printf "foo\nbar\nbaz\n" | sed "${START},${END}d"
=> baz

printf "foo\nbar\nbaz\n" | sed " ${START} , ${END} d"
=> baz
コメント1件

140
名無しさん@お腹いっぱい。[sage]   投稿日:2014/12/12 12:44:39
>136
> sedは「,」が未知のコマンドです、と言ってき

これ、START 変数が undef か空っぽ("")なんじゃない?
set -x してからスクリプトを実行してみて確かめたほうがいいよ。

141
名無しさん@お腹いっぱい。[sage]   投稿日:2014/12/12 12:45:54
エスパーすると $START とかに 全角スペース が入ってるw

142
名無しさん@お腹いっぱい。[sage]   投稿日:2014/12/12 12:55:10
なるほどw

143
名無しさん@お腹いっぱい。[sage]   投稿日:2014/12/12 13:05:14
$ printf "foo\nbar\nbaz\n" | sed ",2d"
sed: -e 表現 #1, 文字数 1: 未知のコマンドです: 「,」

144
名無しさん@お腹いっぱい。[]   投稿日:2014/12/12 14:02:50
>136 です。

やさしきみなさん、コメントありがとうございます。
これからいじくってみて、あとで結果報告いたします。

145
名無しさん@お腹いっぱい。[]   投稿日:2014/12/12 14:35:13
>136 です。

デバグ用の

echo $START
echo $END

の直後に、

START=`echo $START`
START=`echo $END`

を追加して実行したところ、な、な、なんと!
思い通りの結果が得られました。この一週間悩んだのが
たった2行の追加でクリアされました。なんかポカーン状態
ですが。。。

画面上では空白が入ってないように見えただけかもしれま
せん。>137 さん助かりました。ありがとうございます。

>139 さんの書かれたprintf文、参考になりました。まずこ
れを試してみるべきでしたね。

146
名無しさん@お腹いっぱい。[sageteoff]   投稿日:2014/12/12 14:52:02
たぶん後ろに改行が入ってたんじゃないかな
^Mのやつ

147
名無しさん@お腹いっぱい。[]   投稿日:2014/12/12 15:06:40
^Mですか。結構、ネット上には^Mを消すという記事がありますね。
これのことだったのか、がてんいきました。

148
名無しさん@お腹いっぱい。[sage]   投稿日:2014/12/12 15:38:25
^M だと、
START=`echo $START`
やっても^Mは取れないから、違うと思うぞ

149
名無しさん@お腹いっぱい。[sage]   投稿日:2014/12/12 18:17:01
シェルスクリプトはXMLのDOM操作のようなことはできないんですか?
あいだに要素を追加したりとか
コメント2件

150
名無しさん@お腹いっぱい。[sage]   投稿日:2014/12/12 19:08:12
要素って具体的に何?
コメント1件

151
名無しさん@お腹いっぱい。[sage]   投稿日:2014/12/12 19:58:42
>149
やればできると思うが、結構面倒だしな

>150
テキスト要素とかタグ要素とか

152
名無しさん@お腹いっぱい。[sage]   投稿日:2014/12/12 20:44:30
>149
xslt使えよ

153
名無しさん@お腹いっぱい。[sage]   投稿日:2014/12/13 00:48:34
シェルスクリプトで、XMLのDOM操作をしたいってことなのか
「のようなこと」ってあるから別の何かかと思った
使ったことは無いんだけど、XMLgawkが便利そう

154
名無しさん@お腹いっぱい。[sage]   投稿日:2014/12/13 03:47:01
XML Starletとか

155
名無しさん@お腹いっぱい。[]   投稿日:2014/12/15 19:52:22
dashってのがあったんだ。
知らなかった。。。ash系なのか、ダッシュ島系なのか

156
名無しさん@お腹いっぱい。[sage]   投稿日:2014/12/15 20:11:02
農家専用プログラミング言語

157
グールドの著作を読むなら原書で[]   投稿日:2014/12/16 15:34:56
1993年に慶応藤沢で書いたc shellプログラムです。fingerの結果から名字を省いて名前だけローマ字表示で取り出しHi xoxo!とするプログラム
#!/bin/csh -f

### Compact wise program that extracts user's first name only from result of "finger" command on UNIX without any Admin rights ###
set who = `finger -m $user`
echo -n ' Hi '"$who[7]" echo '\!' (= Hi YOURNAME!)
# First name comes at 7th place divided by spaces

当時の基準で採点してみてください。当時はこういうユーザフレンドリなプログラム見かけなかったんだけど。環境が違えばあったのかな?
コメント1件

158
名無しさん@お腹いっぱい。[sage]   投稿日:2014/12/16 17:02:19
>157
1993年ってもうSVR4とかある時代だからそんなに古くないし、スクリプト内容も見所がない。
何を採点して欲しいやら。

強いて言うと、
cshスクリプト - 大減点
echoコマンドを2回に分ける必要ない - 減点
echoコマンドのところ改行のコピペミス?
fingerコマンドの出力って環境によってたぶん違うよ。

ちなみにこちらの環境では finger の 4番目の位置にファーストネームが入る。

#!/bin/sh

set `finger -m $USER`
echo ' Hi '"$4"'!'
コメント1件

159
グールドの著作を読むなら原書で[]   投稿日:2014/12/16 17:23:03
>158
echoコマンドはこういう遣り方じゃないと勝手に改行が入って苦労しました。
!も特殊文字扱いだったということでしょう。
それはさておきいちいちwhoとか名前付けてsetしなくてよいということですね。
こういうプログラムって当時からやってました?
sfcって遅れたキャンパスだったので、他大学の工学部などでは常識でも
あのキャンパスでは非常識ということも多々あるかと思います。
とにかくHi [first name]っていうプログラムを動かしてたのは学内で自分だけでした。
プログラムの全体はLaTeXをエクステンション除いたファイル名だけ打ち込めば
任意のプリンタから自動印刷できるという内容なんですがね。

160
名無しさん@お腹いっぱい。[sage]   投稿日:2014/12/16 17:28:04
昔話がしたいの?

161
グールドの著作を読むなら原書で[]   投稿日:2014/12/16 17:38:54
他キャンパスでは当時どうだったか知りたいだけ。これってアドミン権限除いた
基本的な構造はAmazon.comなどで金になってる商売だから。

162
名無しさん@お腹いっぱい。[sage]   投稿日:2014/12/16 17:51:39
1993年ならUNIXとしては遅い方。
どこにでも普通に転がってるスクリプトだし、なんの変哲もないヘボスクリプトの何を評価しろとw

163
グールドの著作を読むなら原書で[]   投稿日:2014/12/16 17:54:06
このスクリプトの特許持っている人ってどの国の何ていう人で取得年は何年?

164
名無しさん@お腹いっぱい。[sage]   投稿日:2014/12/16 17:54:28
なんで特許持ってる前提になってんの?

165
グールドの著作を読むなら原書で[]   投稿日:2014/12/16 17:58:23
金になるアイデアには特許が付き物でしょう。Amazon.comだって誰かに金払ってるでしょ。

166
名無しさん@お腹いっぱい。[sage]   投稿日:2014/12/16 18:23:54
もしかして、root権限がなくても/etc/passwdのフルネームフィルドが読める手法がすごい、って言ってるの?
/etc/passwdは一般ユーザーでももともと読めるし、(たとえshadowでもパスワード部分以外は)
NIS使ってるならypcat passwdは一般ユーザーでもできるし。
何の新規性もない。
コメント1件

167
グールドの著作を読むなら原書で[]   投稿日:2014/12/16 18:38:28
>166
そうではなくて、大したことの無いアイデアが金になることがある、ということを強調している。
Amazon.com等々が誰かに金を払っているのは事実の筈だし。無論アドミン権限の中のプログラム
であってもデータから抜き出す作業は同じ。で、Amazonとかできた当初はHi某とか言ってこなかった
筈なので、そこら辺の経緯を知りたいわけ。日本語では英語名で抜き出すのは日本語名で抜き出す
よりは厄介な筈。他に方法いくらでもあるから。
コメント2件

168
名無しさん@お腹いっぱい。[sage]   投稿日:2014/12/16 18:43:25
スレ違い。

169
名無しさん@お腹いっぱい。[sage]   投稿日:2014/12/16 20:12:06
「俺が始めてだ、すげーだろー」は、その時点で主張しなけりゃ何の意味もない

ちなみにBBSにおいてユーザーの識別子として一方向ハッシュを表示する手法を、提唱したのは俺だ。

170
名無しさん@お腹いっぱい。[sage]   投稿日:2014/12/16 21:46:14
>167
そこまで知りたいなら調べて報告してくれ
おしえてクンじゃなければね

171
名無しさん@お腹いっぱい。[sage]   投稿日:2014/12/17 00:10:11
>167
> Amazon.com等々が誰かに金を払っているのは事実の筈だし。

まず、このソースを出してくれ

172
名無しさん@お腹いっぱい。[sage]   投稿日:2014/12/19 14:14:12
mksh; MirBSD Korn Shell
ってのがあったんだ。
知らなかった。。。ash系なのか、ダッシュ島系なのか

173
名無しさん@お腹いっぱい。[]   投稿日:2014/12/23 07:08:11
おっさんそんな調子で年越せんのか
しっかりしろ

174
名無しさん@お腹いっぱい。[sage]   投稿日:2014/12/25 17:52:08
さあ、クリスマスだよ。
学生さんは冬休みに、買ってもらった
Mac, iPhone, android でシェルスクリプトを書いて遊ぼう!

175
名無しさん@お腹いっぱい。[sage]   投稿日:2014/12/25 18:54:27
買ってもらった?
学生なら自分で買うわ。

生徒や児童なら買ってもらうかも知れんが。

176
[sage]   投稿日:2014/12/25 19:32:27
/:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::ヽ
    /:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::://ヽ:::::::::::::::|
    l:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::// ヽ::::::::::::::l
    l:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::/:::「'ヽ::::::::::://   ヽ:::::::::::|
    |::::::::::::::::::::::::::::::::::::::::::::::::::::::::::ノl:::ノ l:::::::/      ヽ::::::::|
   ノ:::::::::::::::::::::::::::::::::::::::::::::::::::::/ ゙゙  ノ:::/ ,,;;;;;;,,    ,,,,ヽ:::::l
   ):::::::::::::::::::::::::::::::::::::::::::::::/    ノ/ __,'''i: ('''__):::l  
  )::::::::::::::::::::::::::::::::::::::::::::::::::/         ̄ ̄ン:. :「 ̄`ヾ   
 1:::::::::::::::::::::::「 `┤l:::::::::::::::::l          ̄   ,  ヽ ̄ l   
  `l:::::::::::::::::::::ヽ  :l li:::::::::::::/        ヽ  /´   `l  |
  ヽ::::::::::::::::::::::\_」 lヽ::::/         .l  !:-●,__ ノ  /      
  ノ:::::::::::::::::::::::::::ノ | l `゙゙           i ,,;;;;;;;;;;;;;;;;;;;;,  /ヽ       
,/ ヽ::::::::::::::::::::::(  l l::::::::..         /.:''/´ ̄_ソ  /  `ヽ
     ヽ:::::::::::::::ヽ | l:::::::::::...      /::// ̄ ̄_ソ  /    \   ヴッ!!
        ヽ:::::::\| l::::::::::::::::...    / :::.ゝ` ̄ ̄/ /       ヽ
           ヽ:::l l:::::::::::::::::::..      ̄ ̄;;'' /         ヽ
              l l;;;;;;:::::::::::::::.....;;;;............;;;;;;''ノ            l
              l l '''''''''''''''''''''''''''''''''''''' ̄l |             |

http://www.youtube.com/watch?v=z2qK2lhk9O0

177
名無しさん@お腹いっぱい。[]   投稿日:2014/12/26 09:25:20
スレ違いかもだけど。。。
cronでスクリプト最速で回すとすると
* * * * * /home/user/hoge.sh
だけど、これ以上の頻度というか速度で実行できないのかな。
無限ループ覚悟で、hoge.shの最後に自分自身をコールするとか。
コメント1件

178
名無しさん@お腹いっぱい。[sage]   投稿日:2014/12/26 09:36:37
自分自身でまわすならcronからは1回でいいじゃん

179
名無しさん@お腹いっぱい。[sage]   投稿日:2014/12/26 09:36:40
>177
何かの待ち受けイベントチェックか?

普通にsleep 1とかしながらループすればいいじゃん。cron必要なし。
自分自身をコールするするのは無駄だからwhile :; do hoge; sleep 1; done で無限ループな。
コメント3件

180
名無しさん@お腹いっぱい。[sage]   投稿日:2014/12/26 09:55:10
*じゃなく*だ。

181
名無しさん@お腹いっぱい。[]   投稿日:2014/12/26 10:01:04
>179
そうです、自宅鯖で、smtpからweb、ssh、イベント監視まで
全部やらせてるマシン。あんまとっぴなことすると、落ちそう
なので。sleep入れれば、変な挙動はなくなりそうですね。
感謝!

182
名無しさん@お腹いっぱい。[]   投稿日:2014/12/26 12:23:03
>179さんの助言をそのまんまパクリ、

さっそくcronをやめて、do while ( `nantoka` ) done方式に変更。
前にcase文をつけてstart、stop、resartで起動、停止
できるようにした。sleep_secは10秒。これで様子みます。

しかし、良スレですね、ここは。いつも助けていただき感謝です。

183
名無しさん@お腹いっぱい。[]   投稿日:2014/12/26 12:27:53
ここの住人のかたがたは皆さん知ってるだろうけど
今浦島な私には、pgrep、pkillというコマンドが使える
のが素晴らしいと思いました。(最近知った)
なんか昔は、kill -9 `pidof nantoka`とかやってたのが
なつかしいというか。

184
名無しさん@お腹いっぱい。[sage]   投稿日:2014/12/26 13:13:19
話続けるなら名前欄にレス番入れてよ。

185
名無しさん@お腹いっぱい。[sage]   投稿日:2014/12/27 13:16:10
>179
conky使ったりatに登録したりしてまわさなくても、
単純にそれで良かったんだなあ。

186
名無しさん@お腹いっぱい。[sage]   投稿日:2014/12/31 06:28:21
さあ、大晦日だよ。
学生さんは冬休みに、買ってもらった
Mac, iPhone, android でシェルスクリプトを書いて遊ぼう!

187
名無しさん@お腹いっぱい。[sage]   投稿日:2014/12/31 13:02:42
iPhoneでどうやって書けるの?


188
名無しさん@お腹いっぱい。[sage]   投稿日:2014/12/31 13:58:30

189
名無しさん@お腹いっぱい。[sage]   投稿日:2014/12/31 19:47:38
書くだけでなく、走らせて結果を見れるやり方
ただ調べた結果だけなので自己責任で

* インターネットブラウザーのjavascript上で走るLinuxで
 http://bellard.org/jslinux/

* もしくは、インターネットブラウザーでwebアプリ
 http://ideone.com/
 http://www.tutorialspoint.com/codingground.htm

* もしくは、sshで他マシンにアクセス
 試した事はないけど、学習用のFree UNIX Shell Accountsとかもある
 http://freeshell.org/

* Jailbreak

190
名無しさん@お腹いっぱい。[sage]   投稿日:2015/01/01 17:27:22
ggl 検索文字列
でw3mを使って検索文字列でググる要にしているのを拡張したい

具体的には
コピーしてクリップボードの中に入ってる文字で検索しようと思う

それ自体は簡単なのだけど、問題は --clipboard や -c のオプションを付けた時に実行されるのか、(ggl -c)
それとももっとルーズに (ggl) と引数無しの状態で実行するか悩んでいる

オプションとかのガイドラインてある?
例えば -l はリスト(at -l など)で使うとか、多くのコマンドは
引数がない時は -h オプションと同じように簡単な説明がでるとかのメジャーなガイドライン

191
名無しさん@お腹いっぱい。[sage]   投稿日:2015/01/01 18:19:12
GNUにはあった気がする
コメント1件

192
名無しさん@お腹いっぱい。[sage]   投稿日:2015/01/01 18:26:54
引数ないときは「クリップボードから」なんて慣習は存在しない。

193
名無しさん@お腹いっぱい。[sage]   投稿日:2015/01/01 18:29:20
興味があったのでちょっと検索してみた。
ガイドラインというのはわからないが、こんな感じで使われてるね〜みたいのなら、

http://catb.org/~esr/writings/taoup/html/ch10s05.html

> The -a to -z of Command-Line Options
>
> Over time, frequently-used options in well-known Unix programs have established a loose sort of semantic standard
> for what various flags might be expected to mean. The following is a list of options and meanings that should prove
> usefully unsurprising to an experienced Unix user:

http://www.gnu.org/prep/standards/html_node/Option-Table.html

> 4.9 Table of Long Options
>
> Here is a table of long options used by GNU programs. It is surely incomplete, but we aim to list all the options that
> a new program might want to be compatible with. If you use names not already in the table, please send
> bug-standards@gnu.org a list of them, with their meanings, so we can update the table.

194
名無しさん@お腹いっぱい。[sage]   投稿日:2015/01/01 20:15:18
>191-193
サンキュー

URL先の情報にぴったりのオプション見つからないから
-h を少し書いて後々忘れた時に備えて、
デフォルトでクリップボードで検索、
引数あるときはそれで検索にする

195
名無しさん@お腹いっぱい。[sage]   投稿日:2015/01/01 22:28:20
両方用意すればいいんじゃない?
自分の名前がgglかgglcかで動作が変わるのも面白そう。

196
名無しさん@お腹いっぱい。[sage]   投稿日:2015/01/01 22:31:09
名前同じで動作変わるとmanの括弧書きの数字が増えてややこしいみたいな?

197
名無しさん@お腹いっぱい。[sage]   投稿日:2015/01/03 21:18:53
そういやgetopt(3)ってPOSIXで規定されてるんだね。いまどきの
*BSD, Linuxならlibcで持ってるものなんだな。

とあるソフトがGNUのgetopt.cを同梱しているので消してやりたいと思って
いたんだけど、configureでgetoptの存在チェックしてlibcの方を優先して
使わせるようにするのがいいのかな。

198
名無しさん@お腹いっぱい。[sage]   投稿日:2015/01/08 11:56:42
「とあるソフト」がGPLなら、一部を削除するのはライセンス違反。
コメント1件

199
名無しさん@お腹いっぱい。[sage]   投稿日:2015/01/08 12:01:18
>198
なんで?

200
名無しさん@お腹いっぱい。[sage]   投稿日:2015/01/08 12:15:36
GPL V3
4. Conveying Verbatim Copies.
5. Conveying Modified Source Versions.
コメント1件

201
名無しさん@お腹いっぱい。[sage]   投稿日:2015/01/08 13:17:19
>200
詳しく

202
名無しさん@お腹いっぱい。[]   投稿日:2015/01/08 18:53:35
質問です
22, 32, 33, 45,
12, 47, 78, 44, 32,
...
数字がカンマで区切って700個書いてあるファイルがあります。
一行に数字が何個あるか規則性はありません。
このファイルを読み込んで数字を100個ずつ出力して7枚のファイルを
作りたいと思っています。シェルスクリプトでうまくできますでしょうか。
出力されたファイルには数字が一列で入っているほうがいいです。
お願いします。

203
名無しさん@お腹いっぱい。[sag]   投稿日:2015/01/08 19:41:16
GNU awk 限定

awk -v RS='' -v FPAT='( *[0-9]+, *\n?){1,100}' \
'{
for(i=1;i<=NF;i++){
gsub(" *\n"," ",$i);
gsub(", *$","",$i);
print $i > i ".txt";
}
}' a.txt

上手く行けば 1.txt ... 7.txt というファイルができるはず
コメント1件

204
名無しさん@お腹いっぱい。[sage]   投稿日:2015/01/08 20:20:07
gawk じゃなくてふつーの awk で。

awk -v RS=, '{print $0+0 > int(NR/100)+1 ".txt" }'

205
名無しさん@お腹いっぱい。[sage]   投稿日:2015/01/08 20:36:37
int((NR-1)/100)+1 じゃないとダメだった。

206
203[sage]   投稿日:2015/01/08 20:51:41
あ、カンマはいらないのね

207
203[sage]   投稿日:2015/01/08 20:56:03
なおかつ1列を1行と読み間違えていた(´・ω・`)ショボーン

208
名無しさん@お腹いっぱい。[sage]   投稿日:2015/01/08 21:09:50
ファイル分割が有るし、awkでやる方が良いだろうけど、sedで
見易さの為-r付けてます

#!/bin/sh
sed -re '
 :loop;
 $! {
  N;
  b loop;
 }

 s/,[ \n]+/, /g;
 s/([0-9]+, ){100}/&\n/g;
' | {
 i=1
 while read line
 do
  echo "$line" > "$(( i++ )).txt"
 done
}

209
名無しさん@お腹いっぱい。[sage]   投稿日:2015/01/08 21:43:46
awkもsedも出ちまったか

tr -d '\r\n' < file

210
名無しさん@お腹いっぱい。[sage]   投稿日:2015/01/08 21:52:48
set -- `sed 's/,/ /g' input.txt`
i=1
while [ $i -le 7 ]; do
(j=1; while [ $j -le 100 ]; do echo "$1"; shift; done) > $i.txt

211
209[sage]   投稿日:2015/01/08 21:57:31
ミス

tr -d '\r\n' < file | tr ',' '\n' | split -l 100

212
名無しさん@お腹いっぱい。[sage]   投稿日:2015/01/08 21:58:20
考えてる途中で送っちゃった。やり直し

set -- `sed 's/,/ /g' input.txt`
i=1
while [ $i -le 7 ]; do
(j=1; while [ $j -le 100 ]; do echo "$1"; shift; j=$((j + 1)); done) > $i.txt
shift 100
i=$((i + 1))
done
コメント1件

213
209[sage]   投稿日:2015/01/08 22:01:45
>212
お前は俺か

214
名無しさん@お腹いっぱい。[sage]   投稿日:2015/01/08 23:07:34
/ *, */を改行に変換してhead

215
名無しさん@お腹いっぱい。[sage]   投稿日:2015/01/09 00:45:24
#!/bin/sh
file=`cat "$1"`
for i in `seq 1 7`; do
for j in `seq 1 100`; do
echo -n ${file%%,*}, >>$i.txt
file=${file#*,}
done
done

216
名無しさん@お腹いっぱい。[sage]   投稿日:2015/01/09 01:53:20
GNU grep and GNU parallel

$ grep -Po '[0-9]+' data.txt | parallel --pipe -L 100 -n 1 -k 'cat - > {#}.txt'

217
名無しさん@お腹いっぱい。[sage]   投稿日:2015/01/09 01:59:25
211と216を足して

$ grep -o '[0-9]\+' data.txt | split -l 100

218
名無しさん@お腹いっぱい。[sage]   投稿日:2015/01/10 02:47:23  ID:xezKGq2J7
.net が書き込めなくなったな
とりあえずscから見ているが

219
202[sage]   投稿日:2015/01/11 18:59:23
>203-217
ありがとうございます。本当に助かりました。
勉強不足を痛感。向上心を刺激されました。

220
名無しさん@お腹いっぱい。[sage]   投稿日:2015/01/14 13:42:56
$SEARCH に入れても awkが動いてくれません
{}が引っかかってしまったのだろうか? どうすればよいのだろうか?

while true
do read SEARCH
awk 'BEGIN{RF="---"}/${SEARCH}/' $save_to
done
コメント1件

221
名無しさん@お腹いっぱい。[sage]   投稿日:2015/01/14 13:55:03
シングルクォートで囲まれてるから置換されないのよ
コメント1件

222
名無しさん@お腹いっぱい。[sage]   投稿日:2015/01/14 14:41:45
>221
多少書き換えてみました
しかし、まだ動きません

clp.sh
do read SEARCH
export SEARCH
awk -f ~/sbin/h_Searher.awk $save_to
done

~/sbin/h_Searher.awk
BEGIN{RF="---"}/$SEARCH/

223
名無しさん@お腹いっぱい。[sage]   投稿日:2015/01/14 17:08:45
perlで書いてしまった
たった1行のためにつまずくとは悔しい

do
 perl ~/Perl_instance/clp.pl
done


~/Perl_instance/clp.pl
open FH, '<', '$save_toと同じファイル';
my @LOG = <FH>;
close FH;

my $sentence = join ' ', @LOG;
my @field = split /---/, $sentence;

# my $search = "Ano";
chomp(my $search = <STDIN>);
for my $lines (@field) {
  if ( $lines =~ m/${search}/ ) {
    print "---\n";
    print "$lines\n";
  }
}

224
名無しさん@お腹いっぱい。[sage]   投稿日:2015/01/15 10:05:06
>220
awk 'BEGIN{RF="---"}/'${SEARCH}'/' $save_to
コメント1件

225
名無しさん@お腹いっぱい。[sage]   投稿日:2015/01/15 12:37:55
>224
thanks!

226
名無しさん@お腹いっぱい。[sage]   投稿日:2015/01/15 13:19:56
そして、$SEARCHにインジェクションされましたとさ。

227
名無しさん@お腹いっぱい。[sage]   投稿日:2015/01/15 18:30:18
GNU awk ならこんなのも

awk -v SEARCH="$SEARCH" 'BEGIN{RF="---"}/SEARCH/' $save_to

228
名無しさん@お腹いっぱい。[sage]   投稿日:2015/01/20 01:40:59
こんな雑誌があることを初めて知った。
なんと月刊で20号以上出ているということにも驚いた。

シェルスクリプトマガジン vol.21
http://www.amazon.co.jp/dp/4904807154/
https://www.usp-lab.com/pub.magazine.html

229
名無しさん@お腹いっぱい。[sage]   投稿日:2015/01/20 05:22:18
その雑誌の半分はシェルスクリプト関係ない内容だから相当ネタがないんだろなって思った

230
名無しさん@お腹いっぱい。[sage]   投稿日:2015/01/21 01:45:14
ツールドフランスの実況が森の景色の解説になってるようなもんか

231
名無しさん@お腹いっぱい。[]   投稿日:2015/01/22 16:29:19
コマンドラインから手入力するとちゃんと動くスクリプトが、cronからだと動かない。
数日悩んだ結果。。。原因はLANGだった
コメント1件

232
名無しさん@お腹いっぱい。[sage]   投稿日:2015/01/22 16:32:53
ルンゲの罠

233
名無しさん@お腹いっぱい。[sage]   投稿日:2015/01/22 16:48:29
>231
まれによくある。

スクリプトの先頭付近でLANGを設定しちゃうことも多いんだけど、Unix的でクールな
ポータビリティのある手法を紹介してくれる偉い人が出てくるのを正座して待ちたい。

234
名無しさん@お腹いっぱい。[sage]   投稿日:2015/01/22 17:14:56
LANG=C

235
名無しさん@お腹いっぱい。[sage]   投稿日:2015/01/23 06:42:51
偉い人が
 共通したものは crontab 先頭で、タスク毎のは env NAME=VALUE COMMAND
と答えるか、もうまるっきり答えないと予想した

236
名無しさん@お腹いっぱい。[sage]   投稿日:2015/01/23 10:00:16
共通したものは crontab 先頭で、タスク毎のは env NAME=VALUE COMMAND
コメント1件

237
名無しさん@お腹いっぱい。[sage]   投稿日:2015/01/23 16:52:05
偉い人のコピペ北ー!
自演っぽくて、コメントしづらい輪

238
名無しさん@お腹いっぱい。[sage]   投稿日:2015/01/23 17:30:03
この話はここで終わりって暗に言ってるんだろう

239
名無しさん@お腹いっぱい。[sage]   投稿日:2015/01/24 10:11:24
LANG=C sl
的な書き方ってどこまで有効なのかな?
bashだけ?
コメント1件

240
名無しさん@お腹いっぱい。[sage]   投稿日:2015/01/24 10:23:49
>239
bourne shell でも使える

241
名無しさん@お腹いっぱい。[sage]   投稿日:2015/01/24 15:26:45
配列の命名規則ってある?

242
名無しさん@お腹いっぱい。[sage]   投稿日:2015/01/24 15:41:53
ない

243
240[sage]   投稿日:2015/01/25 04:39:03
みんなはどうしてる?
しっくりくる表記法がないんだけど

244
名無しさん@お腹いっぱい。[sage]   投稿日:2015/01/25 05:18:01
しっくりこない表記がワカラナイ

245
名無しさん@お腹いっぱい。[sage]   投稿日:2015/01/25 11:18:23
配列は邪教
使わないので規則などない
コメント2件

246
名無しさん@お腹いっぱい。[sage]   投稿日:2015/01/25 11:45:02
>245
同意

247
名無しさん@お腹いっぱい。[sage]   投稿日:2015/01/25 12:36:31
配列って変数名に連番を入れたりして使うことかと思ってたw

248
名無しさん@お腹いっぱい。[sage]   投稿日:2015/01/25 13:47:36
>245,245
じゃあ代わりにどうすればよいのだ?
まさかコピペ?

249
名無しさん@お腹いっぱい。[sage]   投稿日:2015/01/25 17:38:43
ポインタとか言い出すと見た

250
名無しさん@お腹いっぱい。[sage]   投稿日:2015/01/25 19:40:14
あほらし

> じゃあ代わりにどうすればよいのだ?
> ポインタとか言い出すと見た
いかにも、めんどくさそう

251
名無しさん@お腹いっぱい。[sage]   投稿日:2015/01/25 19:46:57
会話するネタがないんだなぁ……

252
名無しさん@お腹いっぱい。[sage]   投稿日:2015/01/25 21:21:36
じゃあおれからネタ
xargsコマンドが好き。無理だと思ってた処理がワンライナーになる
いっそ、powershellみたいにjsonパイプラインみたいなのがあればいいのにって思う

253
名無しさん@お腹いっぱい。[sage]   投稿日:2015/01/25 22:41:49
俺がよく使うのはfind ... | xargs grep だったかな
他どんな場面で使うっけ

254
名無しさん@お腹いっぱい。[sage]   投稿日:2015/01/25 23:37:38
\ls -1t *.* |head -3|xargs head

255
名無しさん@お腹いっぱい。[]   投稿日:2015/01/26 12:06:00
>236

*.*の3行が、headへの標準入力じゃなくて、引数として与えられるのか。
おもしろいなあ。

256
名無しさん@お腹いっぱい。[sage]   投稿日:2015/01/26 20:35:10
xargs で何か面白い事は無いかと、あれこれ考えた結果
ループになる
xargs loop で検索したら結構見つかるので
珍しくは無いんだろうが、まあ、一応

<<EOF xargs -I i sh -c 'seq 3 | xargs -I j echo i j'
foo bar
baz qux quux
corge
grault
EOF

257
名無しさん@お腹いっぱい。[sage]   投稿日:2015/01/27 02:26:05
xargs は並列処理でもよく使うかな
例えば find ... | xargs -P 12 -n 16 gzip とすると12プロセスがファイルの圧縮を行う

258
名無しさん@お腹いっぱい。[sage]   投稿日:2015/01/27 03:09:32
\nをファイル名に仕込まれて爆死する

259
名無しさん@お腹いっぱい。[sage]   投稿日:2015/01/27 06:47:01
find ... -print0 | xargs ... -0 ... ってしとけばええやん…

260
名無しさん@お腹いっぱい。[sage]   投稿日:2015/01/27 07:02:05
\0をファイル名に仕込まれて(ry

261
名無しさん@お腹いっぱい。[sage]   投稿日:2015/01/27 07:38:50
仕込めるんだっけ?
コメント1件

262
名無しさん@お腹いっぱい。[sage]   投稿日:2015/01/27 08:17:49
find ‥ -print0 を知らん奴もいるんだな w
コメント1件

263
名無しさん@お腹いっぱい。[sage]   投稿日:2015/01/27 08:20:05
>261
API だと思い付かない
ディスクを直接バイナリ編集すれば可能かも
コメント1件

264
名無しさん@お腹いっぱい。[sage]   投稿日:2015/01/27 08:25:13
>262
実装によってはないのよ
コメント1件

265
名無しさん@お腹いっぱい。[sage]   投稿日:2015/01/27 08:28:26
solarisにはまだない

266
名無しさん@お腹いっぱい。[sage]   投稿日:2015/01/27 12:18:24
>264
移植すりゃいいじゃん
コメント1件

267
名無しさん@お腹いっぱい。[sage]   投稿日:2015/01/27 12:56:34
大抵は
-exec {} +
で用が足りる

268
名無しさん@お腹いっぱい。[sage]   投稿日:2015/01/27 13:01:19
>263
カーネル内でもファイル名は0終端で扱ってるから無理だね
実際のサイズと異なる事でカーネルクラッシュなどまずいことが発生する可能性は
あるけど、それは普通にカーネル内バグ

269
名無しさん@お腹いっぱい。[sage]   投稿日:2015/01/27 13:29:38
>266
そういう話じゃないよ
コメント1件

270
名無しさん@お腹いっぱい。[sage]   投稿日:2015/01/27 13:41:29
>269
半分冗談だよ、いちいち気にしてたら禿げるぞ

271
名無しさん@お腹いっぱい。[sage]   投稿日:2015/01/27 13:43:51
冗談に見えないし、
冗談だとしても面白くないよ

272
名無しさん@お腹いっぱい。[sage]   投稿日:2015/01/27 15:15:56
大抵は
-exec \{\} +
とエスケープなりクォートで囲むなりするのを忘れる
コメント1件

273
名無しさん@お腹いっぱい。[sage]   投稿日:2015/01/27 16:27:07
{}をquoteしなきゃならないカタワ専用シェルって何?
コメント1件

274
名無しさん@お腹いっぱい。[sage]   投稿日:2015/01/27 21:10:27
-execはなんか怖いんだよなぁ
理由はないんだけど
コメント1件

275
DAEMON[daemon@2ch.net]   投稿日:2015/01/27 21:45:21
>273
 シ
タッ・・(Φ Φ+)・・・ 恐らく Perl です
コメント1件

276
DAEMON[daemon@2ch.net]   投稿日:2015/01/27 22:02:58
>275
 シ
タッ・・(Φ Φ+)・・・ 例えば、基礎公文で…

while (test) {
       open test-file.txt(filehandle) ,
          ">test-file.pl"
       print test-file.txt
    close test-file.txt
}

斯様な様にですか…

277
名無しさん@お腹いっぱい。[]   投稿日:2015/01/28 00:14:24
>272
で、{}をクォートする必要があるシェルって何?

278
名無しさん@お腹いっぱい。[]   投稿日:2015/01/30 19:56:12
wait入れるsleepだが、引数が整数だけだろと思ってたら、整数じ
ゃなくてもいいというので、0.1入れてやってみたら、ほんとに動
作してるっぽい。manには何も書いておらん。つかえねーman

279
名無しさん@お腹いっぱい。[sage]   投稿日:2015/01/30 20:00:01
うちのsleepはGNUだけど man sleep すると info 見ろって書いてあって、info 見たら:
Historical implementations of `sleep' have required that NUMBER be
an integer, and only accepted a single argument without a suffix.
However, GNU `sleep' accepts arbitrary floating point numbers (using a
period before any fractional digits).
コメント1件

280
名無しさん@お腹いっぱい。[]   投稿日:2015/01/30 21:57:35
>279

おお、サンクス

281
名無しさん@お腹いっぱい。[sage]   投稿日:2015/01/31 12:09:54
>274
客先環境での操作なんかだとおおいにある
xargsなら、-pとか-tがあるので安心
コメント1件

282
名無しさん@お腹いっぱい。[sage]   投稿日:2015/01/31 13:19:36
>281
同意が得られて異端じゃないと安心出来た
尚就職してから今まで客先環境でしか働いたことがない模様

283
名無しさん@お腹いっぱい。[sage]   投稿日:2015/01/31 17:47:20
こうじゃなくて
v=${v:-default}

こうでしょ
: ${w:=default}

っていうの有りますか?皆さんの、そういうの教えて下さい

284
名無しさん@お腹いっぱい。[sage]   投稿日:2015/02/01 00:46:16
こうじゃなくて
echo -e 'hoge\nfuga'

こうでしょ
printf 'hoge\nfuga\n'

285
名無しさん@お腹いっぱい。[sage]   投稿日:2015/02/01 00:47:04
俺はecho派

286
名無しさん@お腹いっぱい。[]   投稿日:2015/02/01 07:05:52
公文い公文

287
名無しさん@お腹いっぱい。[sage]   投稿日:2015/02/01 13:49:52
echo は -e が必要だったり不要だったりモノによってバラバラなんで printf だなぁ。
OSX の /bin/sh は bash だけど、同じ bash のはずなのに
bash -c "echo -e 'hoge\nfuga'" と sh -c "echo -e 'hoge\nfuga'" で
結果が違うとかめんどくさすぎる。

288
名無しさん@お腹いっぱい。[sage]   投稿日:2015/02/01 18:28:40
似た様なのだけど、

こうじゃなくて
function f () {
echo hoge hoge
}

こうでしょ
f () {
echo hoge hoge
}

289
名無しさん@お腹いっぱい。[sage]   投稿日:2015/02/01 19:10:32
個人的には上なんだけど
最近やってるのがjavascriptだからかな

290
名無しさん@お腹いっぱい。[sage]   投稿日:2015/02/02 10:43:19
変数は大文字か小文字か。
個人的には環境変数と区別するために小文字なんだけど、
社内の他の人が書いたのを見ると大文字ばっかりなんだよな。

291
名無しさん@お腹いっぱい。[sage]   投稿日:2015/02/02 12:18:06
いつexportしても問題が出ないような命名規則なら問題無しw

292
名無しさん@お腹いっぱい。[]   投稿日:2015/02/02 21:56:58
質問です。
linux mint 17.1 でコマンドの練習してるのですが、
% ls -l
だと色々ずらーっと出るんですけど、本に書いてあるとおり、
ソートコマンドを練習しようとして
% ls -l | sort +4
と打ち込んでファイルサイズで降順ソートしたかったのですが
sort: cannot read: +4: そのようなファイルやディレクトリはありません
と出てしまいます。
bashですが、シェルの種類によってはこのオプション使えないんでしょうか。
-r等は正常に動作します。
コメント1件

293
名無しさん@お腹いっぱい。[sage]   投稿日:2015/02/02 22:04:13
sort -k4
sort -k4r

294
名無しさん@お腹いっぱい。[]   投稿日:2015/02/02 22:34:00
で、できました!有り難うございます!

295
名無しさん@お腹いっぱい。[sage]   投稿日:2015/02/03 03:09:11
>292-294
sort +4と同じ指定はsort -k5
たぶんls -lでファイルの所有者が全て同じで、できたと勘違いしてる
--debugオプションをつけるとわかりやすい
https://www.gnu.org/software/coreutils/manual/html_node/sort-invo...
> On older systems, sort supports an obsolete origin-zero syntax ‘+pos1 [-pos2]’ for specifying sort keys.
> The obsolete sequence ‘sort +a.x -b.y’ is equivalent to ‘sort -k a+1.x+1,b’ if y is ‘0’ or absent,
> otherwise it is equivalent to ‘sort -k a+1.x+1,b+1.y’.

sort +4という古いオプションの扱いはPOSIXのバージョンによるってことかな
https://www.gnu.org/software/coreutils/manual/html_node/Standards...#Standards-conformance

296
名無しさん@お腹いっぱい。[sage]   投稿日:2015/02/03 06:48:02
Linux だったら ls コマンドは GNU coreutils の ls だろうから、

$ ls -l --sort=size
or
$ ls -lS

でええじゃまいか

297
名無しさん@お腹いっぱい。[sage]   投稿日:2015/02/03 08:37:05
( 検索結果で上位に上がると期待して ) 日本語訳を貼り付けておきます

http://linuxjm.sourceforge.jp/info/GNU_coreutils/coreutils-ja.html
http://linuxjm.sourceforge.jp/info/GNU_coreutils/coreutils-ja_15.html#Standards-conformance

298
確認不足だった orz[sage]   投稿日:2015/02/03 08:40:20
訂正

( 検索結果で上位に上がると期待して ) 日本語訳を貼り付けておきます

http://linuxjm.sourceforge.jp/info/GNU_coreutils/coreutils-ja_15.html#Standards-conformance
http://linuxjm.sourceforge.jp/info/GNU_coreutils/coreutils-ja_43.html#sort-invocation
コメント1件

299
名無しさん@お腹いっぱい。[sage]   投稿日:2015/02/04 22:55:20
>298
おお、infoの日本語訳できたんだ
man on WWWのように検索できるとさらにいいね

300
名無しさん@お腹いっぱい。[sage]   投稿日:2015/02/08 15:04:24
よく使うワンライナーなどはどうやって呼び出すものなんですか?
何か簡単に管理する方法がありませんかね?
コメント3件

301
名無しさん@お腹いっぱい。[sage]   投稿日:2015/02/08 15:06:57
zshならzawから
vimのUnite historyの様なgrep効くから、それで呼ぶか
編集して完成させる
コメント1件

302
名無しさん@お腹いっぱい。[sage]   投稿日:2015/02/08 16:40:17
>301
anything.elみたいなヒストリーサーチみたいですね。
bashなのでどうしたものか。

303
名無しさん@お腹いっぱい。[sage]   投稿日:2015/02/09 09:34:08
>300
aliasじゃないの?
コメント1件

304
名無しさん@お腹いっぱい。[sage]   投稿日:2015/02/09 10:04:38
自分で書いたスクリプトはいつでも、一見、間違いのないように見えるw

305
名無しさん@お腹いっぱい。[sage]   投稿日:2015/02/09 18:00:27
まったくだ(´・ω・`)
ぼくの書いたスクリプトが動かないなんてけしからん(´・ω・`)
シェルの方を治したまえ

306
名無しさん@お腹いっぱい。[sage]   投稿日:2015/02/09 18:21:02
cygwinからLinuxに移植したシェルスクリプトが,ping部分で成功しなかった


declare -A URL
URL=(
  ["Vim_part24"]="Vim Part24 "
  ["vim_part5"]="vim Part 5 /ソフトウェア板"
  )

# ping for download
ping_error=0
for i in ${!URL[@]}
do
  # ping ${URL[$i]} > /dev/null
  ping -n 1 `echo ${URL[$i]} | awk -F"/" '/http/{print $3}'` > /dev/null
  if [ "$?" -ne 0 ]; then
    echo "${i} : can not contact ${URL[$i]}"
    ping_error=1
  fi
done

307
名無しさん@お腹いっぱい。[sage]   投稿日:2015/02/09 18:41:13
ping -c 1 ... にするべきじゃないの?

pingのコマンドオプションって統一されてないよなぁ
コメント1件

308
名無しさん@お腹いっぱい。[sage]   投稿日:2015/02/09 19:27:08
配列を使うのはダサいと思うのです。

#!/bin/sh
url_list='
Vim_part24 Vim Part24
vim_part5 vim Part 5 /ソフトウェア板
'
ping="ping -w 3 -c 1"
echo "$url_list" | while read thr url __; do
case "$url" in
https?://*)
host=`echo $url | cut -d/ -f3`
if ! $ping $host >/dev/null; then
echo "$thr: cannot contact $url"
err=1
fi
;;
esac
done
exit $err
コメント1件

309
名無しさん@お腹いっぱい。[sage]   投稿日:2015/02/09 19:28:49
ああ、case の条件部分がおかしい。
http://*|https://*|ftp://*)
だな。

310
名無しさん@お腹いっぱい。[sage]   投稿日:2015/02/09 19:33:01
わざわざpingするのがわからん
コメント1件

311
名無しさん@お腹いっぱい。[sage]   投稿日:2015/02/09 19:34:49
pingしなくても wget -T でタイムアウトできるしな
コメント2件

312
名無しさん@お腹いっぱい。[sage]   投稿日:2015/02/09 19:39:42
俺んところの現場でも、ssh する前に ping するスクリプトを書いてる人がいたな。
これって、どこかに由来する文化なのかな?
(cronを「くーろん」と呼ぶみたいな?いや、これは違うかな……)
コメント3件

313
名無しさん@お腹いっぱい。[sage]   投稿日:2015/02/09 19:43:34
>307
サンキュー
windowsのsystem32/ping.exeが呼ばれてた
そりゃ移植性がないわけだ

>308-309
コードありがとう

>311
-Tオプションなんてあったのか

>310
pingで鯖落ちてないか検査した後w3mで複数のURLから取ってきて
スレの上下の不要な広告など取り除いてから git commit して
その差分見るから

全部安全に通信できるか見てからやらないと、差分の時にちょっと問題になる
通信できなかったスレがマイナス差分で大量表示されたり、
次回は大量追加されたり

git reset hard HEAD~ するぐらいならあらかじめ通信検査してからやろうと思った
コメント1件

314
名無しさん@お腹いっぱい。[sage]   投稿日:2015/02/09 19:45:19
>311
それもあるし、どれかひとつでもエラーでping_error=1だからサーバの状態を確認してる感じがしない

315
名無しさん@お腹いっぱい。[sage]   投稿日:2015/02/09 19:47:43
もうひとつバグってた。こうしないと常に0で終了しちゃう。
echo ... | {
while read ... do
...
done
exit $err
}

316
名無しさん@お腹いっぱい。[sage]   投稿日:2015/02/09 20:32:51
>313
> -Tオプションなんてあったのか

通信系のコマンドで、タイムアウトが指定できないものはスクリプトからは利用しないとか、
そういうことは考えないで作っちゃうタイプの方ですか?

ちなみに、大抵の通信系コマンドはタイムアウトが指定できるような気がする。

317
名無しさん@お腹いっぱい。[sage]   投稿日:2015/02/09 20:46:31
Windows 7 からだっけか? デフォルト設定では ICMP echo をフィルタリングしてるのって
コメント1件

318
名無しさん@お腹いっぱい。[sage]   投稿日:2015/02/09 21:22:03
>303
> >300
> aliasじゃないの?
長いワンライナーは場面ごとに手直しする必要のあることが多いから、
それだと融通がきかないことがありませんか?

319
名無しさん@お腹いっぱい。[sage]   投稿日:2015/02/09 22:07:20
2chのスレが更新されてるかどうか(新しいレスがあるかどうか)チェックするのは自分もやってる
いろいろやり方はあるだろうけど、自分の場合は
libwww-perl(debian系)に入ってるHEADコマンドで.datファイルのLast-Modifiedフィールドみたいなのを見てる
コメント1件

320
名無しさん@お腹いっぱい。[sage]   投稿日:2015/02/10 06:45:24
>312
ここに書いてる奴本人じゃね?w

321
名無しさん@お腹いっぱい。[sage]   投稿日:2015/02/10 06:59:04
>317
XP じゃね?
毎回設定してたような気がする
2K は忘れた

322
名無しさん@お腹いっぱい。[sage]   投稿日:2015/02/10 07:03:40
>312
ダイヤルアップとかで最初の接続に時間がかかるから ping でネットワーク接続してから、おもむろに目的のアプリケーションで接続するって言うのがあったような気がする
コメント2件

323
名無しさん@お腹いっぱい。[sage]   投稿日:2015/02/10 10:03:19
スクリプト化してると問題があったとききりわけが必要だから
ping打っているかどうか確認してるんじゃ?

>322
ちょっと違うけど自動切断有効にしてて切れてほしくないときに
ping打ちっぱなしにしてたな
コメント1件

324
名無しさん@お腹いっぱい。[sage]   投稿日:2015/02/10 10:06:07
>319

差分は取得しないのか
コメント1件

325
名無しさん@お腹いっぱい。[sage]   投稿日:2015/02/10 10:12:53
皆、同じようなことやってるんだなw

326
名無しさん@お腹いっぱい。[sage]   投稿日:2015/02/10 10:32:51
>323
切り分けといっても、pingが成功したらネットワーク的に問題ないとは言えないわけで……
対話環境で作業している時だったら、お手軽だから「まずping打ってみるか」というのは
分かる気がするけど、スクリプトの場合では中途半端なように思えます。

「ICMPは通るね」というのをスクリプト中から確認できても、それほど嬉しくはないよね?
コメント1件

327
名無しさん@お腹いっぱい。[sage]   投稿日:2015/02/10 10:41:38
そういえばhttps対応とかが面倒で結局wget丸投げ取り込みとかに逃げてたりするけど
正しい汚染チェックってどうするべきなんだろう?

328
名無しさん@お腹いっぱい。[sage]   投稿日:2015/02/10 11:00:13
>326
ネットワークよりむしろ、ローカル的な問題がない事が確認できるんじゃないかな?
コメント1件

329
名無しさん@お腹いっぱい。[sage]   投稿日:2015/02/10 11:05:04
>328
どういうこと?
コメント1件

330
名無しさん@お腹いっぱい。[sage]   投稿日:2015/02/10 11:07:57
>322
なるほど。
自分ではそういう環境でスクリプトを走らせたこと無いけど、必要性は理解できる気がする。

331
名無しさん@お腹いっぱい。[sage]   投稿日:2015/02/10 11:11:26
でも今どきそんな環境あんまりないよなぁ

332
名無しさん@お腹いっぱい。[sage]   投稿日:2015/02/10 11:11:41
>329
ネットワークの問題:待つ
ローカルの問題:別の方法を試す
コメント1件

333
名無しさん@お腹いっぱい。[sage]   投稿日:2015/02/10 11:21:02
>332
すみません、日本語でお願いします

334
名無しさん@お腹いっぱい。[sage]   投稿日:2015/02/10 11:23:49
自力で何とかなる問題とならない問題を切り分ける。

335
名無しさん@お腹いっぱい。[sage]   投稿日:2015/02/10 11:41:25
pingで切り分けになるか?

336
名無しさん@お腹いっぱい。[sage]   投稿日:2015/02/10 11:43:10
F5アタック状態でいいならどうでもいいかもしれないな。

337
名無しさん@お腹いっぱい。[sage]   投稿日:2015/02/10 12:28:31
pingはじくところもあるから
URL次第

338
名無しさん@お腹いっぱい。[sage]   投稿日:2015/02/10 12:55:57
>312
ベテランなら、サーバ自体死んでるか、sshdが動いてない(かfirewall等)
の切り分けを考慮してるんだろう。実際に使うスクリプトとしては正しい

339
名無しさん@お腹いっぱい。[sage]   投稿日:2015/02/10 13:20:41
>324
差分は専ブラで取得です^^;
コメント1件

340
名無しさん@お腹いっぱい。[sage]   投稿日:2015/02/10 13:36:06
>339
差分なんて git 以外にも diff や vimdiff 等あるからやってみたら?

341
名無しさん@お腹いっぱい。[sage]   投稿日:2015/02/10 14:15:44
いやレンジ指定じゃないかと?

342
名無しさん@お腹いっぱい。[sage]   投稿日:2015/02/10 19:43:43
>300
alias も出たから、ついでに...

自分は ${HOME}/bin に、スクリプトとして書いているが、場所はどこでもいいから
どこかにまとめて保存しておけばいいのでは?例えば、~/bin/oneliner/ 等

それらのファイルは、grep で検索も出来るし、それで見つかった script を編集するなら
history -r script で履歴に読み込んで、コマンドライン上で編集が出来る

(あと、あんまり使わないけど) bash zsh で、Ctrl-x Ctrl-e で editor を呼び出して
読み込んで実行とか
コメント1件

343
名無しさん@お腹いっぱい。[sage]   投稿日:2015/02/10 22:45:11
>342
> (あと、あんまり使わないけど) bash zsh で、Ctrl-x Ctrl-e で editor を呼び出して
> 読み込んで実行とか
Ctrl+rでヒストリ検索でいいんじゃない?
コメント1件

344
名無しさん@お腹いっぱい。[sage]   投稿日:2015/02/10 23:29:41
history -r script を bash の話と断って無かった。失礼しました

>343
スクリプトファイルから履歴に読み込むと、行毎に履歴の最後に追加されるから
previous-history Ctrl-p (もしくは↑)で十分だけどね

345
名無しさん@お腹いっぱい。[sage]   投稿日:2015/02/14 04:53:42
^string1^string2^
!n:gs/string1/string2/
!-n

等 bash で履歴を利用するものは shopt -s histverify すれば確認・編集が出来て便利だよね

346
名無しさん@お腹いっぱい。[sage]   投稿日:2015/02/16 18:20:07
スレ違いスマソ

どうなっちゃうの、2ちゃん?
なんか、ツイッターとかFBみたくなるのか?
極端に利用者減ると思うけどな。

1 :ニライカナイφ ★ 転載ダメ&#169;2ch.net:2015/02/16(月) 16:24:24.83 ID:???*
◆2ちゃんねるがdatを近日廃止、さらにウェブスクレイピングを用いた専用ブラウザ開発・
  公開は禁止して2015年3月3日以降はAPI経由の許諾制に

「2015/3/3以降、2ch.net専用ブラウザ(以下「専用ブラウザ」)を開発、
公開するには、2ch.netの所有者であるRaceQueen社の許諾を得て、
2ch.netが提供するAPI(以下「API」)を用いて開発する必要があります」

別スレッドへのリンク(タイトル情報なし/ニュース速報+板)

347
名無しさん@お腹いっぱい。[sage]   投稿日:2015/02/16 18:27:38
いざとなったらこれだな
テキスト広告除去
w3m some_2ch_URL |sed '1,/^$/d'|sed -e '/^━━━*$/,$d'|sed '$d'

例えば

w3m シェルスクリプト総合 その24 |sed '1,/^$/d'|sed -e '/^━━━*$/,$d'|sed '$d'

348
名無しさん@お腹いっぱい。[sage]   投稿日:2015/02/16 18:50:00
スレ違いだとわかってるならよそでやれ

349
名無しさん@お腹いっぱい。[sage]   投稿日:2015/02/16 19:15:37
スレ的にはxdotoolとかでブラウザ操作すれば問題ないのではないだろうか?
コメント4件

350
名無しさん@お腹いっぱい。[sage]   投稿日:2015/02/21 14:32:41
【実況】向かいの部屋に住んでいる女子高生が窓を開けたままオナニーしているんだが
お前は騙されて通信技術板へやってきたわけだが2 /通信技術板

351
名無しさん@お腹いっぱい。[sage]   投稿日:2015/02/24 13:40:24
質問です。
あるテキストの中に含まれる、特定のキャラクタの数を数え
たいのですが、すごく簡単にできそうで、わからなくて
悩んでおります。grepでもwcでもできそうで、できません。
ご教授お願いします。
コメント4件

352
名無しさん@お腹いっぱい。[sage]   投稿日:2015/02/24 14:17:32
>351
全キャラクタの後ろに改行を入れて、grep 'キャラクタ' | wc -lで数えられる
改行を入れるのはOSによって面倒だったりするが。。。
コメント1件

353
名無しさん@お腹いっぱい。[sage]   投稿日:2015/02/24 14:32:17
>351
キャラクタ A を数える場合、

tr -dc A | wc -c

>352
すみませんが詳しい方のみ回答をお願いします
コメント1件

354
名無しさん@お腹いっぱい。[sage]   投稿日:2015/02/24 14:40:49
wwwww


全キャラの後ろ(要するに1文字ごと)に改行は必要なくて
数えたいワード単位に改行入れて(sed)、grep、wcだね

sedあまり好きじゃないからperlならこう

perl -pe ’s/foo/foo¥n/g’ file | grep foo | wc -l

スクリプトにしてfooを引数にすりゃ汎用的に使える
コメント2件

355
名無しさん@お腹いっぱい。[sage]   投稿日:2015/02/24 17:15:08
堂々とbashを使うお(´・ω・`)

356
名無しさん@お腹いっぱい。[sage]   投稿日:2015/02/24 17:53:14
>353で答は出てるけど、どーしても grep を使いたいなら
grep -o foo | wc -l

351とか353とか無駄すぎ。
353は1行に1回しかマッチしないことが保証できるので grep | wc ではなく、grep -c でよい。
コメント3件

357
名無しさん@お腹いっぱい。[sage]   投稿日:2015/02/24 19:23:17
2chMateで質問を見て、これはこのスレで学んだgrep -oを披露するしかないと
意気込んで帰宅してスレ開いたら>356に書かれていたでござる

358
名無しさん@お腹いっぱい。[sag]   投稿日:2015/02/24 19:55:49
>356
"A" が抜けてるんじゃ?

$ grep -o A foo | wc -l
コメント1件

359
名無しさん@お腹いっぱい。[sage]   投稿日:2015/02/24 20:01:41
せやな

360
名無しさん@お腹いっぱい。[sage]   投稿日:2015/02/24 20:07:04
せやろか

361
名無しさん@お腹いっぱい。[sage]   投稿日:2015/02/24 21:34:48
>351
ネタ的な解答です

echo $(( $( sed -e 's/[^で]//g; s/で/ + 1/g' data ) ))

362
名無しさん@お腹いっぱい。[sage]   投稿日:2015/02/24 22:11:45
>358
>354ではfooが検索キーワードになっていることを受けてなんじゃね
ファイル名なりパイプ入力は実際に実行するには必要だが
言いたいことに焦点を当てるためと解釈すればおk

363
名無しさん@お腹いっぱい。[sage]   投稿日:2015/02/24 22:42:20
昔はWindowsが好きでUnixは嫌いだったが、最近、シェルプログラミングの真髄、Unixの真髄が
身に染みてきた。VBSを仕事でやってるが、何せ長い。シェルスクリプトだと数十行で済むようなことが
何千行とかになってしまう。

Unixのコマンド自体がワンライナーで済んでしまうことも多いが、
シェルスクリプトや正規表現、Unixのアプリを組み合わせて20行、30行もかけば
かなりの処理ができるな。

ただし、VBSのすごいところは、GUIまでわりと自由に操作できることだな。

UnixもWindowsもそれなりに何かすばらしさを感じる。
コメント1件

364
名無しさん@お腹いっぱい。[sage]   投稿日:2015/02/24 22:43:45
文字ではなく単語単位だと
マッチ部分が重複するケースもあると思うけど
そういう時はどう書けばいいんだろ

$ echo ABC | grep -Po '..'
AB
$ echo ABC | grep -Po '.(?=.)'
A
B

$ echo ABC | ?
AB
BC
が欲しい
コメント3件

365
名無しさん@お腹いっぱい。[sage]   投稿日:2015/02/24 22:45:35
真髄ねー

366
名無しさん@お腹いっぱい。[sage]   投稿日:2015/02/24 23:11:13
>363
>349とかどうよ?
コメント1件

367
名無しさん@お腹いっぱい。[sage]   投稿日:2015/02/25 10:15:56
>356
お前は4時間以上かけてそんな回答しかできないのか

368
名無しさん@お腹いっぱい。[sage]   投稿日:2015/02/25 10:36:23
20時間以上かけた回答に期待

369
名無しさん@お腹いっぱい。[sage]   投稿日:2015/02/25 21:30:04
str='>351 ネタ2です。
ところで、あるテキストや特定のキャラクタは utf-8 であると考える必要性は有りや無しや。
神に問う。信頼は罪なりや。 果たして、無垢の信頼心は、罪の源泉なりや。'

echo "$str" | grep -o . | LC_COLLATE=C sort | uniq -c
echo "$str" | perl -0777 -ne 'print s/。//g,"\n"'
コメント1件

370
名無しさん@お腹いっぱい。[sage]   投稿日:2015/02/25 22:36:30
>366
楽しそうだね。でも、GUIの操作をすべてコマンドからやりたいよ。
オブジェクトでも作る?

371
名無しさん@お腹いっぱい。[sage]   投稿日:2015/02/25 22:47:56
xteじゃダメ? ドラッグの仕方はよくわからんが。
コメント2件

372
名無しさん@お腹いっぱい。[sage]   投稿日:2015/03/02 23:05:19
明日以降は、ここを見る回数も減るかもしれない。みなさん一応さようなら
ネタは不評だったけど、最後かもしれないし >364 にも答えておこう。
perl と ruby で

#!/bin/sh
echo '商工会議所長' |
 perl -ne 'while( /(?=(会議所|所長))/g ){ print $1, "\n"; }'

echo '商工会議所長' |
 ruby -Ku -ne 'puts $_.scan( /(?=(会議所|所長))/ ).join( "\n" )'
コメント3件

373
名無しさん@お腹いっぱい。[sage]   投稿日:2015/03/02 23:11:47
>349で落としてdat変換位、スクリプトで出来ないかな?

374
名無しさん@お腹いっぱい。[sage]   投稿日:2015/03/03 03:08:17
>372
何がなんだか…w

375
名無しさん@お腹いっぱい。[]   投稿日:2015/03/03 08:07:50
>372って問題がわかってないよな
「aaaaaaaaaa」に対して「aa」が
どうマッチするかってことなんだけど
なんで会議所と所長になっちゃうんだろうかw
脳味噌足りてなさそう
コメント1件

376
名無しさん@お腹いっぱい。[]   投稿日:2015/03/03 17:30:06
$ echo 'ABC' | perl -ne 'while( /(?=(AB|BC))/g ){ print $1, "\n"; }'
AB
BC

じゃまずいのかな。
コメント1件

377
371[sage]   投稿日:2015/03/04 06:55:50
>376
>375 に対しての発言の様にも取れるけど、>372 に対しての発言ならば...
それも試した上で、書いてる

無反応だったけど >369 で utf-8 である事を考えていないものが有る事を指摘したので
引き続き、>364 のお題
> 単語単位だとマッチ部分が重複するケース
に沿って、日本語に入れ替えただけ

378
名無しさん@お腹いっぱい。[sage]   投稿日:2015/03/04 13:23:38
>364は任意のテキストに使える記述を期待してるんじゃないだろうか
所長と会議所限定じゃなく
コメント1件

379
363[sage]   投稿日:2015/03/04 22:12:28
>378
いや…
スレタイ的にLL言語に頼らないやり方を期待してた

380
名無しさん@お腹いっぱい。[sage]   投稿日:2015/03/04 22:57:35
スレとあんま関係ないんだけど、
みんなどんな時も/bin/sh縛りなの(´・ω・`)?

それとも割と躊躇なく、bashとかzsh使うの(´・ω・`)?

使う人はどういう線引きで/bin/shと高機能シェルを使い分けてるの(´・ω・`)?
コメント1件

381
名無しさん@お腹いっぱい。[sage]   投稿日:2015/03/04 23:04:13
スレと関係ないからよそでやってくれる?

382
371[sage]   投稿日:2015/03/06 06:31:41
>354 でも perl は使われているのだが、ワンライナーも許されませんか

wikipedia で LL言語を見ると、awk も AUTO だけど、sed は入っていなかったので
sed を使って無理やり書いてみよう
.*? が使えないので .. みたいな正規表現への対応は思いつけなかったけど、単語を抜き出すだけならこれで

#!/bin/sh
re1=${1:-会議所\|所長}
str=$re1
while
 re2=$re2$( echo "$str" | sed -e 's/^\(.\).*/\1/' )
 length=${#str}
 str=${str#*|}
 [ "${#str}" -ne "$length" ]
do
 :
done

# ここから
sed -ne '
 : loop
 /'"$re1"'/ {
  s/^[^'"$re2"']*\('"$re1"'\)/\1\n/
  P
  s/^.\(.*\)\n/\1/
  b loop
 }
'

383
名無しさん@お腹いっぱい。[sage]   投稿日:2015/03/06 06:33:59
bash でも

#!/bin/bash
re1=${1:-会議所\|所長}
str=$re1
while
 re2=$re2${str:0:1}
 length=${#str}
 str=${str#*|}
 [ "${#str}" -ne "$length" ]
do
 :
done

while
 IFS= read -r line
do
 while
  [[ "$line" =~ ^[^${re2}]*((${re1}).*) ]]
 do
  echo "${BASH_REMATCH[2]}"
  line=${BASH_REMATCH[1]}
  line=${line#?}
 done
done

384
名無しさん@お腹いっぱい。[sage]   投稿日:2015/03/06 06:36:18
使用例

$ echo 'abc' | ./testsed 'ab\|bc'
ab
bc

$ echo 'abc' | ./testbash 'a.|b.'
ab
bc

385
371[sage]   投稿日:2015/03/06 07:34:31
訂正
全般的に変数代入の箇所のクォート
var="var"


#!/bin/bash
re1="${1:-会議所|所長} "

386
名無しさん@お腹いっぱい。[sage]   投稿日:2015/03/06 08:05:27
読む気もおきないです本当にありがとうございました

387
名無しさん@お腹いっぱい。[sage]   投稿日:2015/03/06 09:15:28
371って問題が理解できてない残念な子だな

388
名無しさん@お腹いっぱい。[sage]   投稿日:2015/03/08 00:18:10
>380
個人用とか、そのマシンに特化したスクリプトならbashだろうがzshだろうが何でもアリだけど
普段から/bin/sh縛りにしておくと、違うマシンでもスクリプトが書けるようになるぞ

389
名無しさん@お腹いっぱい。[sage]   投稿日:2015/03/08 03:45:15
と思うだろ。
でも実際は変な癖がそれぞれついてるんで、あまり役に立たない。

390
名無しさん@お腹いっぱい。[sage]   投稿日:2015/03/08 05:35:53
bash拡張を使うなら#!/bin/bash
コメント1件

391
名無しさん@お腹いっぱい。[sage]   投稿日:2015/03/08 05:57:27
>390
bashが/bin/にない環境もあるで

392
名無しさん@お腹いっぱい。[sage]   投稿日:2015/03/08 07:00:32
/bin/tcsh縛りで書いてるw
コメント1件

393
名無しさん@お腹いっぱい。[sage]   投稿日:2015/03/08 08:29:58
busyboxのsh縛りが実用的。

#!/sbin/busybox sh

と書くこと。

394
名無しさん@お腹いっぱい。[sage]   投稿日:2015/03/09 01:03:57
>392
害悪。
君個人しか絶対使わないマシン以外は触らないで。

395
前スレ119[sage]   投稿日:2015/03/11 18:57:08
前スレ119です。その節はお世話になりました。
さて、プレーンテキスト中の

hoge_01_bar.pdf
hoge_01_foo.pdf
hoge_02_bar.pdf
hoge_02_foo.pdf
。。。
hoge_58_foo.pdf
hoge_59_bar.pdf
hoge_59_foo.pdf
hoge_60_bar.pdf
hoge_60_foo.pdf



hoge_{01..60}_bar.pdf
hoge_{01..60}_foo.pdf

に置換したいのですがどうすればできますか?
よろしくお願いします。
コメント1件

396
前スレ119[sage]   投稿日:2015/03/11 19:13:00
追加で申し訳ないです。hoge部はhoge1、hoge2、piyo00_piyo01など入り乱れてるのが
同じtree.txt中に混在している状況です。
数字の部分も

01_{01..07} #(実際は7行ある)、
...
04_{01..04} #(これも4行ある)

になっているブロックもあったりしてかなりヤヤコシイのですが、
[(連番になっている数字)以外のところが同じ行]を検出して数字を{}でまとめたい感じです。
3000行あって手作業は泣きそうなので、エレガントな方法をご教授いただければ幸いです。
{01..04}_{01..07}とする必要は無いです。
よろしくお願いします。

397
名無しさん@お腹いっぱい。[sage]   投稿日:2015/03/11 19:16:18
そういうのはシェルで書きたくないな
コメント1件

398
名無しさん@お腹いっぱい。[sage]   投稿日:2015/03/11 19:54:30
とりあえずソートしようぜ

399
名無しさん@お腹いっぱい。[sage]   投稿日:2015/03/11 20:19:19
>397
何で書くの(´・ω・`)?

400
名無しさん@お腹いっぱい。[sage]   投稿日:2015/03/11 20:27:02
perlでもrubyでもpythonでも好きなのでいいよ

401
名無しさん@お腹いっぱい。[sage]   投稿日:2015/03/11 20:48:55
>395,395
ご自分が言っているように、まず
>[(連番になっている数字)以外のところが同じ行]を検出して
これをする。たとえば次のように
sed -e 's/_[0-9][0-9]_/_%%_/' tree.txt | sort | uniq
これで「連番になっている数字以外のところが同じ行」をパターン化できる
そしたら、そのそれぞれのパターンで grep tree.txt して、sort -n し、
head -n 1 と tail -n 1 で連番の最初と最後の値を切り出す

こんな感じで行けないかな
コメント2件

402
名無しさん@お腹いっぱい。[sage]   投稿日:2015/03/11 20:58:26
なんのアイデアもなくすまんが、連番かどうか見るのがめんどくさそうですね

403
名無しさん@お腹いっぱい。[sage]   投稿日:2015/03/11 23:14:35
すまん
問題が全然理解出来ない
誰か問題を解説してくれ
コメント1件

404
名無しさん@お腹いっぱい。[sage]   投稿日:2015/03/11 23:20:28
もともとは韓国領だったが、
日本の植民地支配から、
日本が勝手に領有権を主張しだした。
現在は国際的にも韓国領と認識されている。

405
名無しさん@お腹いっぱい。[sage]   投稿日:2015/03/11 23:54:15
北朝鮮のことか。

406
名無しさん@お腹いっぱい。[sage]   投稿日:2015/03/12 00:03:26
理解できないなら無理に答えようとしなくていい

407
名無しさん@お腹いっぱい。[sage]   投稿日:2015/03/12 01:56:20
独島は韓国領だよ。
やつらの主張の誤りは、独島=竹島だと言張ってるところ。
独島は竹島だとは別の島だよ。

408
名無しさん@お腹いっぱい。[sage]   投稿日:2015/03/12 02:02:58
石島とか言ってたソビエトみたいな島の事?

409
名無しさん@お腹いっぱい。[sage]   投稿日:2015/03/12 02:46:00
>403
Bashのブレース展開の逆がやりたいってことかと

410
名無しさん@お腹いっぱい。[sage]   投稿日:2015/03/12 03:03:37
perlのモジュールで
http://search.cpan.org/~vvu/Compress-BraceExpansion-0.1.7/lib/Compre...
てのがあった
このままじゃ使いものにならんけどね

411
名無しさん@お腹いっぱい。[sage]   投稿日:2015/03/12 16:01:30
ちょっとお知恵を拝借したい
テキストファイルを検索して見つけた行数を取得したいときって
grep -nで行数出力させて取得するのが一番シンプルかな?
マッチする最終行にしたい場合はtailと組み合わせてさ

ちなみにシェル知らなかったころってreadで1行ずつ読み込んで判断してたw
コメント2件

412
名無しさん@お腹いっぱい。[sage]   投稿日:2015/03/12 16:32:34
「一番」って難しいこと聞くね

413
名無しさん@お腹いっぱい。[sage]   投稿日:2015/03/12 18:00:51

414
名無しさん@お腹いっぱい。[sage]   投稿日:2015/03/12 18:40:40
>413
オマエいつも問題の意味取り違えて回答して点数もらえないタイプだろw
コメント2件

415
名無しさん@お腹いっぱい。[sage]   投稿日:2015/03/12 20:35:27
>414
ん?
質問:検索して見つけた行数を取得したい
cオプション: 検索条件にマッチした行数を表示する
コメント1件

416
名無しさん@お腹いっぱい。[sage]   投稿日:2015/03/12 20:36:26
>414
あ、わかった
質問は行番号のことを行数といっているのね

417
名無しさん@お腹いっぱい。[sage]   投稿日:2015/03/12 20:36:37
>415
まだわかってないのか…重症?
コメント1件

418
名無しさん@お腹いっぱい。[sage]   投稿日:2015/03/12 21:26:36
ちょっとwc
コメント1件

419
名無しさん@お腹いっぱい。[sage]   投稿日:2015/03/12 22:07:04
>418
オプションなしだと複数返すコマンドだよね

420
名無しさん@お腹いっぱい。[sage]   投稿日:2015/03/13 00:23:15
行数と行番号じゃ、意味が違うな。
日本語に不自由してるのぅ

421
名無しさん@お腹いっぱい。[sage]   投稿日:2015/03/13 01:03:30
grep -nで出力されるのは行数ではないね

422
名無しさん@お腹いっぱい。[sage]   投稿日:2015/03/13 01:16:54
なんかgrep -c言ってる人がバカにされてるけど
>grep -nで行数出力させて取得するのが一番シンプルかな?
>マッチする最終行にしたい場合はtailと組み合わせてさ
これから察するに、行数と書いてはいるが、実際は行数じゃなくて行番号のこと言ってるんじゃないの?
マッチした行数が知りたいなら最終行の話なんて出てこないだろ

つまり本当にバカなのは>417と推測
まぁ質問主から続きがなければ有耶無耶だが

423
421[sage]   投稿日:2015/03/13 01:17:57
俺何言ってんだ?
すまん眠かったってことで何も見なかったことにしてくれ……死ぬ……

424
名無しさん@お腹いっぱい。[sage]   投稿日:2015/03/13 04:43:04
行数、直訳すると line number

425
名無しさん@お腹いっぱい。[sage]   投稿日:2015/03/13 07:28:39
line countじゃないの?

426
名無しさん@お腹いっぱい。[sage]   投稿日:2015/03/13 07:40:15
直訳、と言ってるだろ。

natural number = 自然数
complex number = 複素数
number = 数

427
名無しさん@お腹いっぱい。[sage]   投稿日:2015/03/13 08:04:07
>number = 数

ちがう。

428
名無しさん@お腹いっぱい。[sage]   投稿日:2015/03/13 08:20:54
違うの知ってて言ってんでしょ

429
名無しさん@お腹いっぱい。[sage]   投稿日:2015/03/13 11:04:35
順序数?

430
名無しさん@お腹いっぱい。[sage]   投稿日:2015/03/13 13:12:27
行番号を行数と呼ぶ人がいるとして、その人は行数を何と呼ぶのでしょうかね。行の数?

431
名無しさん@お腹いっぱい。[sage]   投稿日:2015/03/13 17:11:36
行回数

432
名無しさん@お腹いっぱい。[sage]   投稿日:2015/03/14 01:06:12
行数はnumber of linesだろ
Fランもたいがいにせいよ
コメント1件

433
名無しさん@お腹いっぱい。[sage]   投稿日:2015/03/14 02:26:16
>411
まあgrepでいいと思う

grep -n regexp FILE | tail -n1 | cut -d: -f1
awk /regexp/'{print NR}' FILE | tail -n1
sed -n /regexp/= FILE | tail -n1

434
名無しさん@お腹いっぱい。[sage]   投稿日:2015/03/14 04:57:44
>432
行数は line count (だからこそ grep -c )

435
名無しさん@お腹いっぱい。[sage]   投稿日:2015/03/14 05:17:25
健全でない言葉が含まれているため表示しません 内容を確認する

436
名無しさん@お腹いっぱい。[]   投稿日:2015/03/14 05:44:10
それは「行数を数えろ」だろ
中卒もたいがいにしとけ
コメント1件

437
名無しさん@お腹いっぱい。[sage]   投稿日:2015/03/14 07:03:54
>436
countは動詞だけじゃなく名詞にもなるんだよ、知らなかった?
コメント1件

438
名無しさん@お腹いっぱい。[sage]   投稿日:2015/03/14 08:50:28
へー

439
名無しさん@お腹いっぱい。[sage]   投稿日:2015/03/14 18:41:01
>437
名詞が連続してるが、それはどう言い訳するんだ?

440
名無しさん@お腹いっぱい。[sage]   投稿日:2015/03/14 21:16:03
http://www.gnu.org/software/grep/manual/grep.html#General-Output-Control
-c
--count
Suppress normal output; instead print a count of matching lines for each input file. With the -v (--invert-match) option, count non-matching lines. (-c is specified by POSIX.)

441
名無しさん@お腹いっぱい。[sage]   投稿日:2015/03/15 00:27:31
一行の中に、
bbbbaaa124iiiiiccccaaaa456lllllddddaaa789と書いてあった場合に、
特定の文字列の後に続いている数字を、スペース空けて抜き出す書き方はないでしょうか
うえの場合だとaaaの後にあるものを抜き出すように、124 456 789のような・・
素人質問ですいませんがよろしくお願いします

442
名無しさん@お腹いっぱい。[sage]   投稿日:2015/03/15 01:12:54
GNU grep が使えるなら

$ echo "bbbbaaa124iiiiiccccaaaa456lllllddddaaa789" | grep -Po '(?!aaa)[[:digit:]]+' | tr '\n' ' '
コメント1件

443
名無しさん@お腹いっぱい。[sage]   投稿日:2015/03/15 02:09:05
>442
できました!
使わせていただきます。ご親切にありがとうございました。

444
名無しさん@お腹いっぱい。[sage]   投稿日:2015/03/15 03:20:18
追加で質問したいのですが、
上の例でbbbbaaa124iiiiicccc222aaaa456lllllddddaaa789とあった場合に、
aaaの直後でない222は省いて124 456 789だけ方法はないでしょうか
何度もすいません

445
名無しさん@お腹いっぱい。[sage]   投稿日:2015/03/15 03:27:09
grep -Po '(?<=aaa)\d+'
コメント1件

446
名無しさん@お腹いっぱい。[sage]   投稿日:2015/03/15 03:50:51
>445
完璧にできました!
この時間に回答いただけるとは思いませんでした。
大変助かりました。ありがとうございました。

447
名無しさん@お腹いっぱい。[sage]   投稿日:2015/03/15 13:29:40
何度もすいません
上の例で、bbbbaaa0.24iiiiicccc2.22aaaa456lllllddddaaa7.89 など
小数点も含む数字が混じっている場合に、同様の条件で0.24 456 7.9を抜き出す方法はないでしょうか
あまりにも聞きすぎなので最後にしようと思います。

448
名無しさん@お腹いっぱい。[sag]   投稿日:2015/03/15 14:11:57
こうかなぁ…

grep -Po '(?<=aaa)\d+(\.\d+)?

でもこれだと、".01" とかにはマッチしないけどね。
それと、"1.2.3" なんて文字列があると、"1.2" にマッチしちゃう。
コメント2件

449
名無しさん@お腹いっぱい。[sage]   投稿日:2015/03/15 14:12:54
ちったぁ自分で考えな
過去2回の答えがなぜそうなるのかを考えれば応用でいけるはずだ
コメント1件

450
名無しさん@お腹いっぱい。[sage]   投稿日:2015/03/15 14:15:07
grep -o 'aaa[0-9\.][0-9\.]' | tr '\n' ' '
コメント1件

451
名無しさん@お腹いっぱい。[sage]   投稿日:2015/03/15 14:16:19
ミス
grep -o 'aaa[0-9\.][0-9\.]*' | sed 's/aaa//g' | tr '\n' ' '
コメント2件

452
名無しさん@お腹いっぱい。[sage]   投稿日:2015/03/15 14:37:30
>448

grep -Po '(?<=aaa)\d+(\.\d+)?(?=[^\d.]|$)'
コメント1件

453
名無しさん@お腹いっぱい。[sage]   投稿日:2015/03/15 14:52:31
>448
>450
>451
再度ありがとうございました。
私のファイルのケースですと450さんのやり方で完全にできました!
大変助かりましたし、勉強になりました。ありがとうございました。


>449
本当そうしようと思います。
それ以前にgrepやsedは簡単な文字抜き出しぐらいにしか使ったことがなかったのですが、
こんなに便利だとは驚きました。学習して次は自分で解決できるようにしたいと思います

454
448[sage]   投稿日:2015/03/15 14:55:28
これは私見だが
grepの-PはPerlの正規表現として扱うためのオプションだ
Perlを知ってるなら問題ないが、知らないなら>451のが多分勉強対象としては正しい
コメント1件

455
名無しさん@お腹いっぱい。[sage]   投稿日:2015/03/15 15:09:05
>452
投稿した後でレス確認しました。すいません。
こちらのやり方でもできました!ありがとうございました。
書き方の意味を勉強してみたいと思います。
>454
ありがとうございます。perlも知らないので、
教えていただいたオプションの意味も含めて調べてみようと思います。

456
395[sage]   投稿日:2015/03/16 22:22:07  ID:iYLKElrbV(3)
>401
なんとか出来ました!ありがとうございました!

sed -e 's/_[0-9][0-9]_/_%%_/' tree.txt | uniq #sortするとls -Rの構造が崩れる
awk '!a[$0]++' tree.txt #fooとbarが交互になっている行をuniq
uniq tree.txt #空行(改行?)が全部消えてまう
sed -i "/:$/i \n" tree.txt #?わからん しっぽが:の行の前に空行を挿入
sed  "/:$/i \n" tree.txt   #?
sed -e "s/^n//" tree.txt   #なんとかできた。あとは%%を数字に戻すのだけ手打ちでがんばる

457
395[sage]   投稿日:2015/03/16 22:22:55  ID:iYLKElrbV(3)
>401
何とか出来ました!ありがとうございました!

sed -e 's/_[0-9][0-9]_/_%%_/' tree.txt | uniq #sortするとls -Rの構造が崩れる
awk '!a[$0]++' tree.txt #fooとbarが交互になっている行をuniq
uniq tree.txt #空行(改行?)が全部消えてまう
sed -i "/:$/i \n" tree.txt #?わからん しっぽが:の行の前に空行を挿入
sed  "/:$/i \n" tree.txt   #?
sed -e "s/^n//" tree.txt   #なんとかできた。あとは%%を数字に戻すのだけ手打ちでがんばる

458
395[sage]   投稿日:2015/03/16 22:24:14  ID:iYLKElrbV(3)
連投申し訳ない

459
名無しさん@お腹いっぱい。[sage]   投稿日:2015/03/25 06:56:05
専用コマンド使わずに実用的な強度の暗号復号フィルタとか誰か書ける?
コメント1件

460
名無しさん@お腹いっぱい。[sage]   投稿日:2015/03/25 12:51:41
>459
専用コマンドってのは、gpg とか openssl みたいなのを指してるの?
python とか perl とかを使っていいのならライブラリ次第で何とでもなりそうだけど、
それも NG なのかな?
コメント1件

461
名無しさん@お腹いっぱい。[sage]   投稿日:2015/03/25 15:07:14
rot13でよければ
tr A-Za-z N-ZA-Mn-za-m

462
名無しさん@お腹いっぱい。[sage]   投稿日:2015/03/25 18:11:12
それはさすがに「実用的な強度」とは言えないのでは……
コメント1件

463
名無しさん@お腹いっぱい。[sage]   投稿日:2015/03/27 22:26:36
会社でシェルスクリプト(awkやsed)いじる必要があるんですが
何かおすすめの本ないですか?

464
名無しさん@お腹いっぱい。[sage]   投稿日:2015/03/28 00:47:40

465
名無しさん@お腹いっぱい。[sage]   投稿日:2015/03/28 11:31:55
後ろからn文字目のみを削除する方法ってある?

1234567890
なら
123456780

12345
なら
1235

になるような。
コメント4件

466
名無しさん@お腹いっぱい。[sage]   投稿日:2015/03/28 14:11:41  ID:gf0XqcquF
>465
nawkのsubstrでできない

467
名無しさん@お腹いっぱい。[sage]   投稿日:2015/03/28 15:17:24  ID:shU+BQtVu
>465
rev, cut -c, head -c, tail -c などでいけるのでは?
$ echo 12345 | rev | cut -c1,3- | rev
1235
$ echo 1234567890 | rev | cut -c1,3- | rev
123456780

468
名無しさん@お腹いっぱい。[sage]   投稿日:2015/03/28 14:36:27
sed -e 's/.\(.\{n-1\}\)$/\1/'
後ろから2文字目なら
echo 12345 | sed -e 's/.\(.\{1\}\)$/\1/'
1235

469
名無しさん@お腹いっぱい。[sage]   投稿日:2015/03/28 15:15:24
>460
LL言語呼び出すにしても拡張ライブラリの専用コマンドに依存するのはNGじゃない?
nkfでrot13読むのは専用コマンドとは言えない気がするけど>462だよなあ。

バイナリ法辺りを実装すればとりあえずなんとかなるんだろうか?

470
名無しさん@お腹いっぱい。[sage]   投稿日:2015/03/28 15:18:54
>465
rev, cut -c, head -c, tail -c などでいけるのでは?
$ echo 12345 | rev | cut -c1,3- | rev
1235
$ echo 1234567890 | rev | cut -c1,3- | rev
123456780

471
名無しさん@お腹いっぱい。[sage]   投稿日:2015/03/29 05:16:26
>465
>後ろからn文字目のみを削除する方法ってある?

a=1234567890; echo "${a%??}${a#?????????}"
コメント1件

472
名無しさん@お腹いっぱい。[sage]   投稿日:2015/03/29 08:10:35
>471
それ、n文字目と言うのが $n 変数に入ってる場合のこと聞いてるんでは? 固定数値ならいろいろ方法あるよ。
コメント1件

473
名無しさん@お腹いっぱい。[sage]   投稿日:2015/03/29 13:30:23
>472
可変でも同じことはできるけど。

a=1234567890; n=4; f(){ r=$1; while [ ${#r} != $2 ]; do eval r=\${r$3?}; done; echo $r; }; echo $(f $a $((${#a} - $n)) %)$(f $a $(($n - 1)) \#);

474
名無しさん@お腹いっぱい。[sage]   投稿日:2015/03/29 13:51:13
もっとエレガントな方法がいいなぁ

475
名無しさん@お腹いっぱい。[sage]   投稿日:2015/03/29 14:10:10
467が他の回答に勝っている点って何があるのかなあ

476
名無しさん@お腹いっぱい。[sage]   投稿日:2015/03/29 14:39:04
bash + GNU coreutils の cut コマンド限定
範囲チェックはしていない

ncut () {
declare str="$1"
declare -i idx="$2"
declare -i len=$(expr length "$str")
echo $str | cut --complement -b$((len - idx + 1))
}

$ ncut 1234567890 2
123456780

$ ncut 12345 2
ncut 12345 2
コメント1件

477
名無しさん@お腹いっぱい。[sage]   投稿日:2015/03/29 14:40:32
>476
おっと、s/delcare/local/ でお願い

478
名無しさん@お腹いっぱい。[sage]   投稿日:2015/04/06 20:37:17
$ N=1; echo 1234567890 | rev | sed 's/\(.\{'"$((N-1))"'\}\)./\1/' | rev

479
名無しさん@お腹いっぱい。[sage]   投稿日:2015/04/06 23:05:32
xyzあいうえおabc
xyzかきくけこabc

というファイルがあったときに
あいうえお
かきくけこ
と抜き出す方法にはどうすればよいでしょうか
grepなどを使うとおもったのですがうまくいきません。
よろしければご教示おねがいします

480
名無しさん@お腹いっぱい。[sage]   投稿日:2015/04/07 01:08:35
ファイル名変更じゃ無くて抜き出しなら
lsのオプション弄ってパイプでsedに繋げばいい

変更ならrename使おう

481
名無しさん@お腹いっぱい。[sage]   投稿日:2015/04/07 01:19:37
sed 's/xyz\(.*\)abc/\1/g'

482
名無しさん@お腹いっぱい。[]   投稿日:2015/04/07 23:44:39
例えば、
親ディレクトリ
/小ディレクトリA/photo/
/小ディレクトリB/photo/
/小ディレクトリC/photo/
みたいなディレクトリ構造があった時photo3つをpictureに
変更するにはどうすればよいのでしょうか
for文にmv入れ込めばできると思ったのですができませんでした
初歩的な質もう申し訳ありませんがよろしくお願いします。
コメント1件

483
名無しさん@お腹いっぱい。[sage]   投稿日:2015/04/07 23:56:55
最後にスラッシュつけなきゃできると思うが
コメント1件

484
名無しさん@お腹いっぱい。[]   投稿日:2015/04/08 00:23:18
for i in *; do cd $i; mv photo picture; done
なんとか自己解決しましたそして>483有難う

485
名無しさん@お腹いっぱい。[]   投稿日:2015/04/08 00:30:06
って違う
for i in *; do cd $i; mv photo picture; cd ..;done
こうだ!!一つしか変わってなかったぜ

486
名無しさん@お腹いっぱい。[sage]   投稿日:2015/04/08 05:44:31
cdが無駄です。

for i in *; do mv "$i"/photo "$i"/picture; done

ディレクトリ名等にスペースが含まれていてもいいように $i は "$i" としておく。

487
名無しさん@お腹いっぱい。[sage]   投稿日:2015/04/09 06:55:16
サブシェルとすればいいだけじゃね?

488
名無しさん@お腹いっぱい。[sage]   投稿日:2015/04/09 08:37:12
サブシェルが無駄です。

489
名無しさん@お腹いっぱい。[sage]   投稿日:2015/04/09 19:49:27
効率求めてshellなんか使っていない。

490
名無しさん@お腹いっぱい。[sage]   投稿日:2015/04/09 22:21:14
その返しは馬鹿っぽいと思います

491
名無しさん@お腹いっぱい。[sage]   投稿日:2015/04/09 23:52:38
>482
http://x68000.q-e-d.net/~68user/unix/pickup?rename
util-linuxのrenameコマンドの場合
rename -v photo picture */photo

Debian系だと正規表現指定、できるかは不明
https://wiki.ubuntulinux.jp/UbuntuTips/FileHandling/RenameCommand

FreeBSDだとsysutils/renameで正規表現指定、できるかは不明
http://www.freshports.org/sysutils/rename/

492
名無しさん@お腹いっぱい。[]   投稿日:2015/04/15 08:31:50
$> TIME="2015/04/15 08:25:16"

$> printf ${TIME:5:11}
04/15

$> echo ${TIME:5:11}
04/15 08:25

$> printf "${TIME:5:11}"
04/15 08:25

罠だ、はまった。。。
コメント1件

493
名無しさん@お腹いっぱい。[sage]   投稿日:2015/04/15 08:45:36
何が罠なの?

シェル変数の展開時には " " でかこんで "${HOGE...}" にするのが基本。

494
名無しさん@お腹いっぱい。[sage]   投稿日:2015/04/15 08:48:00
最初から、
date '+%m/%d %H:%M'
にした方がいいのでは?

495
名無しさん@お腹いっぱい。[sage]   投稿日:2015/04/15 08:48:10
>492
$ printf "${TIME:5:11}"
04/15 08:25

$ printf "%s %s\n" ${TIME:5:11}
04/15 08:25

496
名無しさん@お腹いっぱい。[sage]   投稿日:2015/04/15 09:13:38  ID:uEYnIocSI
$ TIME="2015/04/15 08:25:16"
$ printf ${TIME:5:11}
04/15
$ /usr/bin/printf ${TIME:5:11}
04/15/usr/bin/printf: warning: ignoring excess arguments, starting with `08:25'
$ type printf
printf is a shell builtin

497
名無しさん@お腹いっぱい。[sage]   投稿日:2015/04/15 09:14:12
$ TIME="2015/04/15 08:25:16"
$ printf ${TIME:5:11}
04/15
$ /usr/bin/printf ${TIME:5:11}
04/15/usr/bin/printf: warning: ignoring excess arguments, starting with `08:25'
$ type printf
printf is a shell builtin

498
名無しさん@お腹いっぱい。[sage]   投稿日:2015/04/15 13:25:09
$ TIME="2015/04/15 13:30:16"
$ printf ${TIME:5:11}
04/15

$ IFS="wanada"
$ printf ${TIME:5:11}
04/15 13:30

499
名無しさん@お腹いっぱい。[sage]   投稿日:2015/04/15 13:48:45
bash依存をやめよう

$ TIME="2015/04/15 08:25:16"
$ printf ${TIME:5:11}
sh: Bad substitution

$ IFS='/ :'
$ set $TIME
$ echo $2/$3 $4:$5
04/15 08:25

500
名無しさん@お腹いっぱい。[sage]   投稿日:2015/04/16 23:26:24
GNU date
$ TIME="2015/04/15 08:25:16"
$ date '+%m/%d %H:%M' --date="${TIME}"
04/15 08:25

501
名無しさん@お腹いっぱい。[sage]   投稿日:2015/04/30 23:24:48
今月のsoftware designはgrepsedawk入門で面白かったな

502
名無しさん@お腹いっぱい。[]   投稿日:2015/05/07 20:52:12
シェルスクリプトを最近使うようになりffmpegなどにファイルを投げて一括処理できるようになりました。
でも、エラー処理に困っています。例えば、ffmpegで作ったファイルが壊れているかどうかわからないのです。
ffmpegはファイルとログを出してくれるのでログの特定の文字(たとえば、bad header、skip)が出てきたときに、
その時のログを書き出し、そのログを使って処理を分岐させることは可能なのでしょうか?
このときffmpegは終了コードは0を返してきました。プログラムによっては終了コード1を返してしてくるものもありました。
コメント1件

503
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/07 20:53:06
grep君でうまく抽出したら正規表現で検索すればできるのでは?

504
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/07 21:54:28
>502
ffmpegは最後に 2>&1 を付ける
付ければログをgrepとかできる

505
名無しさん@お腹いっぱい。[]   投稿日:2015/05/08 20:35:13
grepをどう使えばいいのですか?

506
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/08 22:13:16
manくらい見た?

507
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/08 22:36:52
うーんこの
man見てくれよせめて--helpとかググるとかしろよ

508
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/09 12:39:02
こんな感じでエラー処理するんだよ
書き込みの内容見てる限りは無理だと思うけど

ffmpeg xxxx > xxxx.log 2>&1

cat xxxx.log | grep "bad header"

if [ $? -ne 0 ]
then
# エラー処理
fi

509
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/09 12:42:06
catは無駄だな。
コメント1件

510
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/09 13:01:23
if [ も無駄だな

511
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/09 13:11:39
>509
判定が1種類だと思ってるアホ発見
コメント2件

512
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/09 13:25:48
>511
二種類あるとどうなるわけ?w

513
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/09 13:26:22
無駄だなw

514
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/09 13:32:28
>511
わかった、こいつ馬鹿だから、catがどう無駄なのかわかってないんだ。
なるほどなー、馬鹿だなーw

515
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/09 15:56:32
ffmpeg xxxx > xxxx.log 2>&1

if ! grep "bad header" <xxxx.log
then
# エラー処理
fi
コメント1件

516
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/09 18:51:16
if [ -n "$(grep 'bad header' xxxx.log)" ]; then
fi

517
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/09 20:08:36
grep -qs "bad header" xxxx.log
case $? in 0) echo "Match";; 1) echo "No match";; *) echo "Error";; esac

518
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/11 21:15:37
>515
これだと判定のたびにログを全部読み直すから無駄無駄
コメント1件

519
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/11 22:56:21
>518
どう直せばいいと思う?

520
名無しさん@お腹いっぱい。[]   投稿日:2015/05/12 18:27:59
bashで
for i in $@
do
command
echo ○○中××番目を処理中です。
done
としたいのですが、○○と××はどうすれば表示できるようになりますか?
コメント2件

521
名無しさん@お腹いっぱい。[]   投稿日:2015/05/12 19:54:49
もう一つ聞きたいことがありました
for i in $@にカレントディレクトリだけじゃなく
そのサブディレクトリのファイルを送るにはどう書けばよいのですか?

522
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/12 19:59:27
>520
count=1
for i in $@
do
echo "$#中${count}番目を処理中です。"
command
count=$(($count + 1))
done

523
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/12 20:00:20
コピペから脱却すればその答えはおのずと見つかるであろう

524
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/12 20:18:46
わざわざ指摘させる流れですか?もうひとつは残しておいた

in $@ は無駄だな

525
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/13 06:35:40
$count の $ は無駄だな。
count=$(($count + 1)) の行自体も無駄とは言わないけどbashなら不要だな。

echo "$#中$(( count++ ))番目を処理中です。"
コメント1件

526
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/13 07:02:23
>525
可読性・保守性が悪いから却下

527
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/13 07:23:59
for ((i=1;i<=$#;i++)); do echo "${#}中${i}番目を処理中"; done
コメント1件

528
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/13 07:39:14
>527
それだと肝心の $@ の処理ができないじゃん、本末転倒。

529
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/13 08:39:25
$@ をどう処理したいの? 例えばこんな感じ?

for ((i=1;i<=$#;i++)); do eval item=\${$i};echo "${#}中${i}番目($item)を処理中"; done

530
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/13 13:58:41
curlでメールチェックできないかと思ったんだけど、どうも参考コードが見当たらないなあ。
もしかしてtelnetのような感じの方法になってスマートには無理なのだろうか?

531
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/13 17:11:23
こういうことではなくて?

http://blog.sarabande.jp/post/88910085203
コメント1件

532
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/13 17:26:02
送信と受信の違いがわからない男おことわりw
コメント1件

533
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/13 17:49:35
ああなるほど、送信がわかれば受信もできるのがわかるから
調べればいいのにと思ったのに
実装されてるコードそのものが欲しかったのね
キミのレベルに合わせられなくてごめんね

534
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/13 17:52:16
マニュアル見れば受信できることなんて一目瞭然だよ
コメント2件

535
名無しさん@お腹いっぱい。[]   投稿日:2015/05/13 19:45:16
カウントありがとうございます
サブディレクトリのほうは無理のでしょうか?
コメント2件

536
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/14 01:27:00
>535
$ hogehoge.sh *     カレントディレクトリのファイルだけ
$ hogehoge.sh $(find)  カレントとサブディレクトリ全部

537
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/14 02:06:32
>534
できないなんて話は最初からどこにもないしなあ。

送信と受信の違いというかプロトコル自体が違うんだから参考になるかどうか。

538
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/14 05:00:09
マニュアルにPOP3の記載とかあると思うんだが
脳内で>531=>534って妄想でもしたか?
コメント1件

539
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/14 06:30:49
>535
IFS=$'\n'
set -- $( find . -type f )
count=0
for i

もしくは、

IFS=$'\n'
fileList="$( find . -type f )"
fileLength=$( echo "$fileList" | wc -l )
count=0
for i in ${fileList}

ところで、v="$( )" のダブルクォートって無駄かな?

540
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/14 07:13:26
v= のように直接代入する場合はダブルクォートは無駄。

それより、findでスペース入りファイル名が見つかった場合とかの対応ができてない。

541
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/14 07:25:46
findで苦労してスペース入りファイル名の対処するより、

for f in * */* */*/* */*/*/*

って書いちゃった方が早いんだよな。どうせ階層は何段階か有限だし、
アスタリスクならスペース入りでも無問題。

542
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/14 07:27:50
> findでスペース入りファイル名が見つかった場合とかの対応
IFS=$'\n'

543
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/14 07:35:52
findで改行入りファイル名が見つかった場合とかの対応ができてない

544
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/14 07:44:29
> 改行入りファイル名が

それは
IFS=$'\n'
と書いてある時点で、自明じゃない?

指摘自体が無駄だな

545
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/14 07:46:27
自明ならバグを作り込んでもいいのかよw 結局使いものにならない

546
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/14 07:49:42
シェルなどのコマンドラインの入力に再利用可能な方法でちゃんとエスケープしてファイル名出力できるようなオプションが
findに欲しいな。(スペースも改行もその他記号もちゃんとクォートして、シェルで評価すると元のファイル名に戻る形式)
(-print0 は xargs 用にしか使えないし)

547
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/14 08:06:46
やるならこんな感じかな。

$ find . -print0 | while read -r -d $'\0' f; do echo $f; done

それから bash の組み込み関数 printf にある %q が使えるかも

bash$ help printf
:
%q quote the argument in a way that can be reused as shell input

548
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/14 09:04:56
while read -rd ''

549
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/14 09:46:33
>538
なぜそういう話になるのかよくわからんが、記載があるならぐだぐだ言うよりコピペで一発なんじゃないか?

550
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/14 10:26:05
誰も相手してないのになぜその質問に触れるかなあ・・・
コメント1件

551
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/14 10:28:14
read -rd '' とかはbash依存なんだよなぁ。。

read: 1: Illegal option -d
コメント1件

552
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/14 10:36:47
>550
どの質問の話?

553
名無しさん@お腹いっぱい。[]   投稿日:2015/05/14 11:21:47
コマンド置換とシェル関数の違いがピンとこないのですけど
どう違うのでしょか?
コメント1件

554
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/14 11:31:29
記載がある筈 なんてはっきりしない話は要らないんだよなあ。
このスレのネタなんて大抵記載がある筈だから。

555
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/14 12:13:05
どう勘違いしたらコマンド置換とシェル関数が同じようなものに思えるんだ??

556
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/14 12:15:56
>553
使う分には
・コマンド置換は再利用ができない
・シェル関数は再利用ができる
の違いがある

557
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/14 12:19:07
それこそ置き換えの効かない例でも出せば理解するだろ。

558
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/14 12:21:29
ll(){ ls -l;}
ll
ってのがシェル関数。

hoge=`ls`
echo "$hoge"
ってのがコマンド置換。

どこも似てない。

559
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/14 12:25:28
どう勘違いしたら言語的文法的に似てるかという話に思えるんだ?

560
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/14 12:45:56
むしろ似てると思うのは何か根本的な勘違いが原因

561
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/14 13:19:51
コマンド置換をaliasと勘違いしてるとか?

562
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/14 13:27:28
>551
今回はbash限定でいい話しだよ。まあ、無駄じゃあないけど

>520
> bashで
> bashで
> bashで

563
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/14 14:08:51
違いを聞くのは別に似てるからじゃないと思うぞ。
単にとある使い方では等価に思えたってだけだろう。
重箱の隅が知りたいみたいな話だな。
コメント1件

564
名無しさん@お腹いっぱい。[]   投稿日:2015/05/14 14:28:51
どう勘違いしたらコマンド置換とシェル関数が等価に思えるような使い方があるんだ??

565
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/14 14:47:51
ageてる人が等価に思えるような話だろう。

566
名無しさん@お腹いっぱい。[]   投稿日:2015/05/14 18:12:58
おっしゃる通り、使い方が同じに見えたので
どんな使い分けをしたらいいのだろうと思っていました

567
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/14 19:43:10
>563
いや、その気持ちが分かるなら答えてやれよ。
さっぱり分からん人間には答えようがないんだから。
コメント1件

568
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/14 20:08:14
使い分けとか考えなくていいんじゃないの?
期待通りの動作をしない場合がないのかだけ考えれば。
コメント1件

569
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/14 20:38:06
>567
わからなきゃ聞くしかなかろ。
気持ちの想像すらできなければ回答役なんて荷が重いから
黙って見守るべきだと思う。
コメント1件

570
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/14 20:54:02
>569
は?だからお前が適任だろ?って話をしてるんだが?
さてはお前どえらい馬鹿だな?

571
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/14 21:13:48
聞こうとしている時にそんな暴言を言うから
気持ちの想像すらできないなんて言われるんですよ。
コメント1件

572
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/14 21:20:34
>571
なんか壮大な勘違いをしてるようだから言っとくけど
お前かなり性格悪そうに見えてるぞ

573
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/14 21:25:29
>568以外になにか言う事でもあるの?

574
名無しさん@お腹いっぱい。[]   投稿日:2015/05/15 06:21:18
echo $(a=A;echo $a)
echo $a

b () {a=A;echo $a;}
b
echo $a

unset a

(a=A)
echo $a

a=A
echo $a

unset a

# 以下zsh。
() {typeset a=A;}
echo $a
() {a=A;}
echo $a

575
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/15 07:08:32
色々言ってたけど結局メールチェックは誰も試してないの?

576
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/15 08:03:24
curlでやってるよ
IMAPもPOP3も普通に使える
コメント1件

577
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/15 08:50:33
./test.sh: 行 5: 予期しないトークン `{a=A' 周辺に構文エラーがあります

b () (a=A;echo $a)
コメント1件

578
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/15 11:06:13
ここ見てると昔書いたスクリプトについて
あのコマンドはああするべきだったとか思うことはあるけど
曲がりなりにも期待した動作はしてたから問題ないと思い直した

579
名無しさん@お腹いっぱい。[]   投稿日:2015/05/15 13:23:55
>577
そう。そこに違いがある事が言いたかった。

580
隼人新聞社[]   投稿日:2015/05/15 17:26:05
★サヨクを応援して1票入れた人は強く反省してください

★民主 枝 野 は殺人を平気で行う極左テロ暴力団と親密交際があった!!!親密交際!テロの手先!北朝鮮の手先(安倍総理の談話)

★   菅 直 人 は朝鮮人と親密交際、献金があった!!朝鮮韓国の傀儡手先(TVで報道!)

★民主は日教組の巣窟。極めて危険な団体、危険な政権だった!北朝鮮を熱烈に支援するのが日教組(信頼できる情報スジの話)!!北朝鮮の手先!

民主の基本姿勢は死刑廃止!!だから自民の安倍総理を支援してください!

サヨクと公明創価を応援するは地獄行き

サヨクを応援して1票入れた人は反省してください

581
名無しさん@お腹いっぱい。[]   投稿日:2015/05/16 18:18:52
キー入力を受け付けを待って止まっているコマンドを
何らかの方法で次のコマンドに行かせる方法はありますか?

582
名無しさん@お腹いっぱい。[]   投稿日:2015/05/16 18:38:27
zshだとzpty
tclだとexpect
ただ単純な事なら
command<<EOF
y
y
n
EOF
とかこんなんで処理できるよ。
コメント1件

583
名無しさん@お腹いっぱい。[]   投稿日:2015/05/16 18:41:48
マウスつかってどうのこうのの話なら、xdotoolとかいうのが使えそう。
plamolinuxのこじま氏の2015/1/8の日記に少し使い方が書いてある。
コメント1件

584
名無しさん@お腹いっぱい。[]   投稿日:2015/05/17 09:38:15
>582, >583
ありがとう
早速、調べてみます
今までできないものと思って諦めていたから感動

585
名無しさん@お腹いっぱい。[]   投稿日:2015/05/17 18:06:01
freebsdのスレッドの人なのかなと思ったので以下でできたよ。詳しい事は知らない。
最近はbashのほうが強力なのかもしれないし、おそらく似た機能はあると思う。
ただexpectが定番だと思う。ただ構文はtclだけど、
たぶん他のshellを使うのって嫌な部分があるだろうし。

# まず以下のpasswordの部分を書いて、試して、感じる。
expect -c '
spawn su
expect Password:
send "your password\r"
interact
'

# passwordとpromptの指定の部分を書換える必要があると思う。
expect -c '
spawn su ;# expectで制御できるようにsuを起動する。
expect Password: ;# promptにPassword:が来るまで待機。
send "your password\r" ;# 来たら引数で指定されたpasswordを入力する。
expect -re {(%|#|\\$) $} ;# Password:が来るまで待機になってたものを、
;# promptの入力受け付け画面に変える。
;# -reは正規表現。ここはmanpageそのまま写しました。
;# 各々によって変える必要があるでしょう。

send "whoami\r"
send "exit\r"
expect eof
'

586
名無しさん@お腹いっぱい。[]   投稿日:2015/05/19 17:38:24
forやwhileとかの中でコマンドを実行するとき
そのコマンドをforやwhileに直接書いて実行させるか
変数扱いさせてのforやwhile上にコマンドを書いて実行させるか
関数として定義してやってforやwhileの中で実行させてやるか
どれが効率的で高速に実行することができるようになるんだろう?
コマンドの呼び出しや実行や終了の重複を考えるとどうなんだろう?
シェルスクリプトを自分で書けるようになってきて、こんな疑問を持つようになりました
皆さんの意見を聞かせて下さい
コメント1件

587
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/19 17:45:28
高速っていうなら直接コマンド記述が高速。
for/whileループであっても、ループ内をキャッシュしたりせず、
毎回コマンド行とか変数とか関数を評価し直しながら実行してる。
しかしシェルスクリプトに高速性なんて求めてはいけない。

588
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/19 20:08:13
そもそも高速化ってそういう事じゃないしな。
何回そのプログラムを実行すれば、そんな間違った高速化の為に費した時間を取り戻せると思う?
コメント1件

589
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/19 21:29:44
高速化したいならプログラム書くしかない
プロセスを起動するコストは莫大だから
コメント1件

590
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/19 21:54:05
iniファイルを読み書きして、ファイル名をキーにしてすでに処理済みのファイルかどうかを条件判定、
みたいなことをbusyboxに内包された汎用コマンドだけでやるには、どうしたらいい?

決められたディレクトリの中に、リサイズしたいjpg画像群があって、
処理済みかどうかを条件分岐したかったんだけど、時間が無くて別のツールで
間に合わせてしまった。再びやりたくて調べてみたけど、実装事例を見つけられず。

591
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/19 22:48:04
busyboxでやりたいならそちらでどうぞ

ちなみにシェルスクリプトでやるならlsでリスト作って
ループしながら処理すればいいと思う
処理済はどこかのファイルにファイル名を書き出して
ループでの処理前にその中にファイルがあるかどうかgrepなどで見て
無ければ処理すればいい

あとなんとなく579=583臭がするけど気のせいか
コメント1件

592
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/19 22:58:05
ありがと。大きなヒントをもらえたので、作ってみる。

ちなみに同一人物じゃないよ。

593
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/20 11:34:26
>588, >589
ドツボにはまりかけてました


>591
妄想、乙

594
名無しさん@お腹いっぱい。[]   投稿日:2015/05/20 13:31:28
なんだコイツ

595
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/20 17:55:29
よう、ネット番長

596
名無しさん@お腹いっぱい。[]   投稿日:2015/05/20 18:12:52
こんな>586
何言いたいか曖昧な事にまともに答えてくれた人に感謝する事だね。
私は何も答えなかったよ。それこそ妄想、乙と感じたしね。

597
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/20 18:24:21
× 答えなかった
○ 答えられなかった(コミュ能力不足)

598
名無しさん@お腹いっぱい。[]   投稿日:2015/05/20 18:27:39
まぁある意味答えられなかったとは言えるな。
認めよう。

599
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/20 18:33:19
少なくとも、ほかの人はある程度の要求仕様をくみ取るところまでは出来たわけだから、
コミュ能力であることは明白。キミさー、これじゃ仕事できないよ。

600
名無しさん@お腹いっぱい。[]   投稿日:2015/05/20 18:38:02
そうだねバファリンの半分が優しさでできているのだとしたら、
彼等は九割方優しさで出来てるといえるね。

601
名無しさん@お腹いっぱい。[]   投稿日:2015/05/20 19:11:05
追っ払っといた。以降スルーで。
あいつはおたくらが汚いレスする値打ちも無い。だからこそ俺の様な男がいるのさ。

602
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/21 06:15:13
-gt の利点について教えてください。
[ HOGE -gt 123 ]
は、
((HOGE > 123))
とも記述できますよね? なら -gt の必要性はあるのでしょうか?
コメント2件

603
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/21 10:47:36
>576
一体どういう書式のどんな結果をどうやって受け取っているのか、参考までに見せて欲しい。
コメント1件

604
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/21 13:10:57
>602
前者はbourne shellから使える一般的な方法
後者は一部のシェルの拡張機能で、使えない場合がある。
使えるならどっちでもいい。上で出てたbusyboxのshだと使えないんじゃないかな多分

605
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/21 15:22:40
>602
数値比較だから16進や8進表現が使える
コメント1件

606
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/21 16:10:57
>605
-gt の利点として??

607
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/21 16:34:31
利点欠点というより
数値比較と文字列比較で機能が異なるので
比べるものじゃない

608
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/21 17:02:11
[ -gt ] も (( > )) も、数値としての比較だが、、

609
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/21 17:12:42
ごめ、誤解してたわ

610
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/21 22:58:30
>603
いくら?

611
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/22 10:22:56
まず自分なりに作ったサンプル出してからうまくいかないと相談すればいいのに
はなから見せろとか無いわ〜

612
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/22 11:00:25
#/bin/sh
curl

ほい
コメント2件

613
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/22 11:11:39
すみませんが詳しい方のみ回答をお願いします
コメント4件

614
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/22 11:19:33
>612
ドキュメント読んで出直してこい

615
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/22 11:36:29
やだね

(echo USER hoge; echo PASS pass; echo STAT) | nc server 110

616
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/22 11:38:38
>612
そこまでして欲しいのかwww
頭が無いなら金を払えよ
コメント1件

617
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/22 11:41:25

618
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/22 11:52:29
DOC嫁なんて言う奴に限って自分は読んでいないのもよくある話。

619
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/22 12:14:11
読むのは質問者で回答者じゃない
コメント1件

620
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/22 12:15:28

621
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/23 00:45:24
>613
そら違うだろ
回答してくれる気のある方のみレスしてくださいだろ
コメント1件

622
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/23 07:23:22
コピペ荒らしにマジレスしてもねぇ

623
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/23 07:57:47
利点とかより互換性だけじゃね?

624
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/23 09:04:23
>621
自分では回答しているつもりになっている半可通が居るからじゃないの?
>532とかは回答なんだろうけど、回答者からは質問者だと錯覚されるから回答がこなくなる。

625
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/23 09:53:03
100レス近く前の書き込みを引っ張る質問者も
相当な意気込みで実装したいらしいな
いじってやるからまた書き込みなよ

626
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/23 11:20:44
ほら居るし。

627
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/23 11:26:14
これだけの時間があればCででも実装できたろうにw

628
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/23 11:31:28
教えてやるから結果を見せろというべきだな。
それが正当な対価だろう。

629
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/23 12:58:15
他人の結果に興味はないだろ普通。
「できましたー!!」←これが対価なの?
馬鹿にしてるの?

630
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/23 14:47:50
興味がないのに口出す訳ないだろう。

631
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/23 14:55:03
>613ですが、ロム容量が極小の組み込み機器に入れる予定で、
シェルスクリプトじゃないとダメです。
繰り返しますがわかる方のみ回答してください。

わからない方は技術力がないと同一ですので(認めたくないでしょうけど)、
素直に黙るのが賢明です。
コメント3件

632
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/23 15:29:15
>631
極小ならアセンブラだろ

633
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/23 15:32:43
偽者の>631は消えろ
まあこれぶっちゃけ200万レベルの仕事だね
コメント1件

634
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/23 15:50:06
アセンブラでも構いません。ARMでお願いします。
繰り返しますがわかる方のみ回答してください。

635
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/23 15:58:55
>633
シェルスクリプトで暗号通貨のウォレットでも作れば?

636
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/23 16:04:25
それはもうできています。
すみませんが質問にだけ回答してください。

637
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/23 16:39:09
できてるならみせてよ

638
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/23 16:52:36
繰り返しますがわかる方のみ、質問にだけ回答してください。
コメント1件

639
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/23 17:05:15
>638
回答者以外はご遠慮下さい。

640
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/23 17:07:20
こっちは仕事でやってるんです。
趣味で遊んでるアナタ方とは違うんです。

641
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/23 17:09:47
そういうネタをやられては困ります。

642
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/23 17:43:32
仕事でやってるのにまさかただとは...

643
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/23 17:56:45
仕事とかいうネタはやめましょうねボク。

644
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/23 18:22:50
仕事=質量×距離
コメント2件

645
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/23 18:27:23
>644
仕事=力×距離

ネタぐらい正しく書こうね
コメント1件

646
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/23 18:57:31
>645
仕事=速度&#178;×質量
だろ

647
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/23 19:02:04
電子工学系の者にとっては

仕事=電圧×電流×時間

648
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/24 08:36:07
仕事=電界×磁界×断面積×時間

649
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/24 09:10:55
金=仕事x時間

650
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/24 09:16:37
∂金/∂t = ∇×仕事

651
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/24 09:43:16
∇・金=0 (金は湧いてこない)

652
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/24 11:40:16
>644-652
もういいんじゃない?

653
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/24 11:47:41
仕事×2ch=解雇

654
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/24 13:06:10
シェルスクリプトで計算式記述してみてよ

655
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/24 13:18:01
物理量の仕事じゃなくて、こっちは本当の仕事でやってるんです。
趣味で遊んでるアナタ方とは違うんです。

656
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/24 13:29:57
まあどうみても>631は趣味だけどな。

657
名無しさん@お腹いっぱい。[]   投稿日:2015/05/24 18:19:02
まちがって、

cd //

ってやったら、エラーにならずに、pwdが//になったw
どこにいたんだ?ww
コメント1件

658
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/24 18:24:05
ネットワークのトップか
そんなとこにも移動できるのか

659
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/24 18:58:32
>657
bashの仕様です。今ごろ気が付いたの?

660
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/24 21:43:39
知らなかった

661
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/25 12:23:11
> bashの仕様す。
というよりは、POSIX かな

http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap03.html

3.267 Pathname
Multiple successive <slash> characters are considered to be the same as one <slash>,
except for the case of exactly two leading <slash> characters.

4.12 Pathname Resolution
If a pathname begins with two successive <slash> characters, the first component following
the leading <slash> characters may be interpreted in an implementation-defined manner,
although more than two leading <slash> characters shall be treated as a single <slash>
character.

662
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/25 12:36:39
英語よめんけどなんか違う

663
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/25 14:37:48
知識無いのに 「bashの仕様です。今ごろ気が付いたの?」 とか恥ずかしくないのだろうか
コメント1件

664
名無しさん@お腹いっぱい。[]   投稿日:2015/05/25 16:59:21
script書いたらすぐ行き当たる問題だし、
pwdで//が二つ出るのはbashやdashの仕様だよ。
zsh rc tclsh tcshどれも/だよ。

665
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/25 19:39:52
>663の人生に暗黒の1ページが加えられた瞬間に立ちあえたことに感謝w

666
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/25 20:31:48
ご質問です。
コマンドライン引数の数字を順番に四則演算するシェルプログラミングを
作りたいのですが、うまくいきません。
演算の順番は+(加算)−(減算)*(乗算)/(除算)です。

#!/bin/sh

total=0
a=("$@")
n=${#a[@]}
n=$((n - 1))
while [ $n -ge 0];
do
total=$((a[$n] + $total))
n=$((n-1))
done
echo "total = $total"

自分でできたのはコマンド引数を加算のみ繰り返す処理です。
もしよい解決方法がおありでしたらご教授お願いします。
コメント3件

667
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/25 21:12:27
学校の宿題か?だったら自分でやれ

668
659[sage]   投稿日:2015/05/25 21:36:30
健全でない言葉が含まれているため表示しません 内容を確認する

669
名無しさん@お腹いっぱい。[]   投稿日:2015/05/25 21:46:27
# こんな感じで動くけどzshじゃないと動かない。後は直してね。
total=0
r=0
until test $#@ -eq 0
do
case $(( r % 4 == 0 ? 1 : (r + 3) % 4 == 0 ? 2 : (r + 2) % 2 == 0 ? 3 : 4 )) in
1) total=$(( total + $1 ));;
2) total=$(( total - $1 ));;
3) total=$(( total * $1 ));;
4) total=$(( total / $1 ));;
esac
shift
(( ++r ))
done

670
名無しさん@お腹いっぱい。[]   投稿日:2015/05/25 21:53:31
# bashで動いた。そっかzshでも$#だけでいいのか。
r=0
until test $# -eq 0
do
case $(( r % 4 == 0 ? 1 : (r + 3) % 4 == 0 ? 2 : (r + 2) % 2 == 0 ? 3 : 4 )) in
1) total=$(( total + $1 ));;
2) total=$(( total - $1 ));;
3) total=$(( total * $1 ));;
4) total=$(( total / $1 ));;
esac
shift
(( ++r ))
done
コメント1件

671
名無しさん@お腹いっぱい。[]   投稿日:2015/05/25 21:55:32
他にもzshだと
for a b c in 1 2 3
do
echo $a $b $c
done
みたいな処理もできる。

672
名無しさん@お腹いっぱい。[]   投稿日:2015/05/25 22:08:26
最初のr=0も無くて動くか。

673
名無しさん@お腹いっぱい。[]   投稿日:2015/05/25 22:21:07
ifとelseでも書けるよ。
baseの後に何が書いてあるのか分らない時は
三項演算子というのを調べると良い。

674
名無しさん@お腹いっぱい。[]   投稿日:2015/05/25 22:21:52
baseじゃなくてcaseね。

675
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/25 22:37:26
total=$(echo "$1+$2-$3*$4/$5" | bc)
echo "total = $total"

676
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/25 23:22:22
自分の行為に「ご」をつけるとか、
どれだけ偉いんだって話だよな。

677
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/26 01:08:45
busyboxだとbcよりdcの方が都合がいいのだろうか?
まあawkでいいような気もするけど。

678
659[sage]   投稿日:2015/05/26 06:28:38
遅くなりましたが、複数の例を挙げてもらって大変勉強になりました!!三項演算子を使う発想はなかった…
コメント1件

679
名無しさん@お腹いっぱい。[]   投稿日:2015/05/26 14:02:41
お世話になります。
PROMPT_COMMANDの設定について教えて下さい。

ターミナルのタイトルバーに現在のディレクトリ名"だけ"を表示したいのですが、
プロンプトの設定でやる
PS1=\w
のような \w がPROMPT_COMMANDの設定では使えないんですね?

どうやったらいいのでしょうか?

680
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/26 15:34:18
PROMPT_COMMAND="pwd"はできるから好きにやればいい

681
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/26 15:43:42
PROMPT_COMMAND='RSET=$(tput sgr0); B=$(tput setf 1); echo "$USER ${B}${PWD}${RSET} $"'

682
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/26 15:53:38
ターミナルでしたか。勘違いしていた
PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME}: ${PWD/$HOME/~}\007"'
PROMPT_COMMAND='echo -ne "\033]0;${PWD/$HOME/~}\007"'

683
名無しさん@お腹いっぱい。[]   投稿日:2015/05/26 20:32:22
>678
ごめん。三項演算子に間違いがあった。
(r + 2) % 2 == 0 ? 3 : 4 )) in じゃなくて
(r + 2) % 4 == 0 ? 3 : 4 )) in だった。
以下楽しくなって、もう一つ書いといた。zshでしか動かないけれど。

a=(+ - \* /)
b ()
{
(( $# == 1 )) || b $@[1,-2]
total=$(( total $a[$(( ($# + 3) % 4 == 0 ? 1 : ($# + 2) % 4 == 0 ? 2 : ($# + 1) % 4 == 0 ? 3 : 4 ))] $@[-1] ))
echo $total
}
b $@


じゃあ勉強頑張って。

684
659[sage]   投稿日:2015/05/26 21:00:09
なぜか2で割ってるのはif文でつくり直してるときに気付きました!!
sh、zsh、bashの違いが何やら…
コメント1件

685
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/26 22:22:51
>684
そんなあなたにbusybox

686
名無しさん@お腹いっぱい。[]   投稿日:2015/05/27 08:32:10
bashもzshも、shの機能を包括した上で拡張していて、shの構文なら共通して動くと捉えてれば良い
と思う。だからbashとzshは配列の扱いなど雑多な違いがある。以下昨日のbash版。
たぶんもっと簡素に書けるのだろうけど私も全然詳しくない。

a=(+ - \* /)
b ()
{
declare -a c=( $@ )
(( $# == 1 )) || b $( echo ${c[@]} |cut -d ' ' -f -$(( $# - 1 )) )
total=$(( total ${a[$(( ($# + 3) % 4 == 0 ? 0 : ($# + 2) % 4 == 0 ? 1 : ($# + 1) % 4 == 0 ? 2 : 3 ))]} ${c[$# - 1]} ))
echo $total
}
b $@


以下みたいな書き方も簡易な条件文。何が起こるのかは(( 1 ))した後にecho $?とかして
値を確認できる。c言語は0が偽だけどshellだと0が真なので注意。cでreturnで0返すでしょ。
さらに(( 0 ))などは、echo $?した時に0として返っていない事に注目。
(( 1 )) && echo true
(( 0 )) || echo true
自ら自らを呼ぶ、再帰関数は調べればすぐ出てくる。
declareは、再帰関数ゆえ、変数名が同じになってしまうから、関数を呼んだ側の変数の値を、
呼ばれた側が変える事が無いようにしている。ローカル変数とか、スコープとか調べると出てくる。

687
名無しさん@お腹いっぱい。[]   投稿日:2015/05/27 10:46:37
シェルスクリプトに関するご質問です。

コマンドライン引数で指定されたキーワードに一致する部分を持つ、カレントディレクトリ配下のファイルをそのディレクトリ階層をそのままにコピーしたいのですが、何かよい方法はありますでしょうか。
何かよい方法はありますでしょうか。
実行環境はCentOSをTera Term とSSH接続している状態です。

実行例として
[user@portal ~]$ ./sample.sh A copyTo 
第1引数はキーワード、第2引数はコピー先のディレクトリ


これでコピーができたことをTera Term上で確認できることが望ましいです。
コメント1件

688
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/27 11:05:38
ワイルドカード

689
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/27 13:08:06
>687
#!/bin/sh
find . -name "*$1*" | cpio -oc | (cd "$2" && cpio -ivdc)
コメント1件

690
名無しさん@お腹いっぱい。[]   投稿日:2015/05/27 13:41:16
ワイルドカード使って自分で書いてみたらこんなのに…
#!/bin/sh
cp -Rv ["$1"] "$2"

>689はビット演算子使っててよくわからないですが、目的の動作は確認致しました!
ありがとうございます!

691
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/27 16:04:06
わざとトンチンカンなこと言ってんのかな

692
名無しさん@お腹いっぱい。[]   投稿日:2015/05/28 10:32:09
>670のやつ整数しか計算できないし、第1引数を0に足してるで
第1 + 第2 - 第3 * 第4 / 第5 + 第6 - …
って処理が正しい

693
名無しさん@お腹いっぱい。[]   投稿日:2015/05/28 12:07:05
# こうすると動くよ。後は引数を実数にしてね。
total=$1; shift
a=(+ - \* /)
b ()
{
(( $# == 1 )) || b $@[1,-2]
total=$(( total $a[$(( ($# + 3) % 4 == 0 ? 1 : ($# + 2) % 4 == 0 ? 2 : ($# + 1) % 4 == 0 ? 3 : 4 ))] $@[-1] ))
echo $total
}
b $@

694
名無しさん@お腹いっぱい。[]   投稿日:2015/05/28 12:23:47
そっか、%つかってるんだった。
まぁ本人じゃないだろうし引かせてもらおう。

695
名無しさん@お腹いっぱい。[]   投稿日:2015/05/28 12:25:16
おそらく663のcodeに
total=$1; shift
だけでいいんじゃないかな。急ぎなので、確認して無いけど。

696
名無しさん@お腹いっぱい。[]   投稿日:2015/05/28 12:32:06
いや%と関係ないか。$#にたいしてだったね。

697
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/28 12:32:46
>666
自分も、参考までに考えておいた
初期値は 0、引数の数は不定で、加算、減算、乗算、除算を繰り返すと解釈した

#! /bin/sh -x
while
total=$(
echo "( ${total:-0} ${1:++ $1} ${2:+- $2} ) ${3:+* $3} ${4:+/ $4}" | bc
)
[ 4 -lt $# ] && shift 4
do :
done

echo "ANSWER: ${total}"
exit


#! /bin/sh -x
while [ 0 -lt $# ]
do
total=$(
echo "( ${total:-0} + ${1:- 0} - ${2:- 0} ) * ${3:- 1} / ${4:- 1}" | bc
)
shift $(( $# > 4 ? 4 : $# ))
done

echo "ANSWER: ${total:-0}"
exit
コメント2件

698
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/28 12:35:03
ああ、せっかく全角スペースで字下げしたのに、間違えてただのスペース打ち込んだか

699
名無しさん@お腹いっぱい。[]   投稿日:2015/05/28 18:17:15
# 他の人のレスは後で確認する。なんだか覚醒してきた。dashで動くように作った。
# 以下をtest.shで保存。
#!/bin/sh
a='/+-*'
test $# -eq 1 && { echo $1; exit; } || total=$( ./test.sh $( echo $@ |cut -d ' ' -f -$(( $# - 1 )) ) )
echo $(( $total $( echo $a |cut -b $(( ( $# + 3 ) % 4 + 1 )) ) $( eval echo \$$#) ))
コメント1件

700
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/28 21:33:17
大きな数の余りの計算とかできる?

701
名無しさん@お腹いっぱい。[]   投稿日:2015/05/28 21:54:55
# 今その要求にshellだけで答えるように考えてる。
# 割り算部分はできたよ。もう疲れたからやめようかな。
# scaleの値を調整すれば何処まで計算するか指定できる。
# -の値を指定するとずっと計算し続けるので注意。
# dashで動くように書いてる。

#!bin/sh
scale=8
total=$1; shift

m ()
{
test $(( $3 )) -eq 0 -o $(( $1 )) -eq 0 && return
b=$1
a=$(( ${b}0 / $2 ))
echo -n $a
m $(( ${b}0 % $2 )) $2 $(( $3 - 1 )) # 余り、割る数、scale.
}
echo -n $(( total / $1 )).
m $(( total % $1 )) $1 $scale
コメント1件

702
名無しさん@お腹いっぱい。[]   投稿日:2015/05/28 22:03:27
使い方書いてなかった。
./保存したfile 355 113
と引数二つです。

703
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/28 23:39:51  ID:4mhEJHtNx
お題が不毛すぎ

704
名無しさん@お腹いっぱい。[]   投稿日:2015/05/29 02:54:31
よし諦めた。

>697 本人じゃなくてわめいてる方ですけど、勉強になります。
一つ目書き方は知らないので勉強しておく事して二つ目ので見ると、
そっか、と思わされました。確かにその通りだと、コードも短いし理解もしやすいし。

>666は彼のを参考にしたほうが良かと。私のは今考えて見ると三項演算子も無駄だったし、
ただ>699は毒毒しい事をしているので、結構勉強になると思う。

705
名無しさん@お腹いっぱい。[]   投稿日:2015/05/29 13:11:54
#!/bin/sh
# ごめん>701 それ再帰してるから途中で計算できてなかった。
# 悪い所も無駄に関数な所も直して無いけど。以下でいける。
scale=-1
total=$1; shift

m ()
{
b=$1 # $1: 余り、$2: 割る数、$3: scale.
until test $scale = 0 -o b = 0
do
a=$(( ${b}0 / $2 ))
echo -n $a
b=$(( ${b}0 % $2 ))
scale=$(( scale - 1 ))
done
}
echo -n $(( total / $1 )).
m $(( total % $1 )) $1 $scale
コメント1件

706
名無しさん@お腹いっぱい。[]   投稿日:2015/05/29 13:15:06
やば>705まさかの$3 scale意味ない説。

707
名無しさん@お腹いっぱい。[]   投稿日:2015/05/29 14:07:59
いやコメント内で使ってたか。

708
名無しさん@お腹いっぱい。[]   投稿日:2015/05/29 17:25:17
なるほどdo whileみたいに使えるだね。
while false
true
do
echo test
break
done
前にfor分は以下で動くのになんでwhileは駄目なんだろうと思った、謎がとけました。
for r in *
{
echo $r
}

709
名無しさん@お腹いっぱい。[]   投稿日:2015/05/29 17:41:57
ふむ、whileから最後の戻り値の間、do doneの間を回るわけだからdo whileとはまた違う。

離れ隠しとも名付けようかこの新手
コメント1件

710
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/29 19:43:00
>> 696
> >697 本人じゃなくてわめいてる方ですけど、勉強になります。
意外な効果で驚くなあ。でも、役に立って良かった

> 一つ目書き方は知らないので勉強しておく
って言葉で改めて見直すと

> 序盤のページで行き詰ってしまいました。
序盤で行き詰まっているんだよね。そんな人に対して適当な回答じゃあ無かったかもしれないなあ
( parameter substitution の機能とか使うべきではなかったか )と思い、妙なヒント入りでもう一度書いておきました



蛇足だけど、V7 Bourne Shell だと、:- でなく - なんだよね
http://www.in-ulm.de/~mascheck/bourne/v7/
> ${parameter-word}
> If parameter is set then substitute its value; otherwise substitute word.

それでなのか、POSIX でも定義されていて
http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.htm...#tag_18_06_02

bash や、dash でも echo ${HOGE-$HOME} が機能する



>709
man dash, man bash, man ksh, man zshmisc と確認してみたけど
while list; do list; done 相当の事が書いてある
結構誰でも知っているて、新手では無いよ

711
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/29 19:44:12
#! /bin/sh -x
total=0
while
 case $# in
 0)
  break
 ;;
 1)
  total=$( echo "${total} + $1" | bc )
  break
 ;;
 2)
  total=$( echo "( ${total} + $1 - $2 )" | bc )
  break
 ;;
 3)
  total=$( echo "( ${total} + $1 - $2 ) * $3" | bc )
  break
 ;;

712
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/29 19:44:26
 4)
  total=$( echo "( ${total} + $1 - $2 ) * $3 / $4" | bc )
  break
 ;;
 [5-9]|[0-9]*[0-9])
  total=$( echo "( ${total} + $1 - $2 ) * $3 / $4" | bc )
  shift 4
  true
 ;;
 *)
  echo 'It never comes here and we know it.' >&2
  exit 1
 ;;
 esac
do : 'Do nothing with list-2 of "while list-1; do list-2; done"'
done

echo "ANSWER: ${total}"
exit

713
名無しさん@お腹いっぱい。[]   投稿日:2015/05/30 04:04:02
# おかげさまで、また少し成長できました。


#!/bin/zsh
eval echo -n \${$#..1} \'$( yes '+-*/'|tr -d '\n' |dd bs=$(( $# - 1)) \
count=1 cbs=1 conv=unblock 2>/dev/null | sed 's#^#r#')\' p |dc


#!/bin/sh
{ eval echo -n $( seq -f "$%g" $# |tac ); echo "$( yes '+-*/'|tr -d '\n' \
|dd bs=$(( $# - 1)) count=1 cbs=1 conv=unblock 2>/dev/null | sed 's#^#r#' )" p; } |dc
コメント1件

714
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/30 07:57:05
なんか凄いもの練り上げたね。なんか、スクリプトを書く 705 の楽しさが伝わってくるわw

eval echo $( seq -f "$%g" $# | tac )
の部分は "$@" とか使えないものかと思い、しばらく考えたんだが...

echo "$@ " | tac -s " "

715
名無しさん@お腹いっぱい。[]   投稿日:2015/05/31 07:18:32
# 書けて良かった。

#!/bin/sh
eval echo 0 $( printf '$%d + $%d - $%d @ $%d /' $( seq $# ) | \
sed 's#+ $0#+ 0#g; s#- $0#- 1#g; s#@ $0#@ 1#g; a p' ) |tr '@' '*' |dc
コメント1件

716
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/31 08:54:03
>713
後段も書き換えてみた
echo "$( yes '+-*/'|tr -d '\n' \
|dd bs=$(( $# - 1)) count=1 cbs=1 conv=unblock 2>/dev/null | sed 's#^#r#' )" p


#! /bin/sh
# 何をするスクリプトかぱっと見で全くわからないので、一応書いておくけど、
# これも >666 の回答
{
 echo "$@ " | tac -s " "
 yes 'r+r-r*r/' | tr -d '\n' | head -c $(( ( $# - 1 ) * 2 ))
 echo "p"
} | dc


>715
アイデアが尽きないね。@は、エスケープ用かな?外しておいた

#! /bin/sh
eval echo 0 $(
 printf '$%d + $%d - $%d \\* $%d / ' $( seq $# ) |
 sed 's#+ $0#+ 0#g; s#- $0#- 1#g; s#* $0#* 1#g; a p'
) | dc

717
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/31 11:51:51
大きな数の計算できるならRSA暗号化もできるんじゃないか?

718
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/31 12:23:30
整形ついでに sed を整理してみた
eval とかなるべく使いたくないけど、printf で展開するアイデアが面白いな

#! /bin/sh
{
 eval echo 0 $(
  printf '$%d + $%d - $%d \\* $%d / ' $( seq $# ) |
   sed -e 's/$0 [+/*\-]* //g'
 )p
} | dc

719
名無しさん@お腹いっぱい。[sage]   投稿日:2015/05/31 18:16:33
ちょっと危なっかしいけど、これで eval も外せたかな?

#! /bin/sh
{
 echo 0 $(
  n=$(( $# % 4 ))
  printf '%d + %d - %d \\* %d / ' "$@" |
   sed -e 's/\([0-9]\{1,\} [+/*\-]* \)\{'"$(( n == 0 ? 0 : 4 - n ))"'\}$//'
 )p
} | dc

720
名無しさん@お腹いっぱい。[sage]   投稿日:2015/06/01 06:34:30
エスケープを外す前の方で書き込んでいた

訂正
#! /bin/sh
{
 echo "0 $(
  n=$(( $# % 4 ))
  printf '%d + %d - %d * %d / ' "$@" |
   sed -e 's/\([0-9]\{1,\} [+/*\-]* \)\{'"$(( n == 0 ? 0 : 4 - n ))"'\}$//'
 )p"
} | dc

721
名無しさん@お腹いっぱい。[sage]   投稿日:2015/06/02 19:51:41
連投スマソ。printf 見直した

#! /bin/sh
echo "0 $( printf '%s + %s - %s * %s / ' "$@" "END" | sed -e 's/END.*$//' )p" | dc

722
名無しさん@お腹いっぱい。[sage]   投稿日:2015/06/02 20:48:50
もうずいぶん前から計算違ってる

723
名無しさん@お腹いっぱい。[sage]   投稿日:2015/06/04 06:35:03
解釈の違いだろ。echo も省いた

printf '%s + %s - %s * %s / ' "$@" "END" | sed -e 's/^/0 /; s/END.*$/p/' | dc
コメント1件

724
名無しさん@お腹いっぱい。[]   投稿日:2015/06/06 17:40:55
先生のcodeを勉強する前に作っておきました。
ここのpageを見て理解しながら作りました。
http://www.maitou.gr.jp/rsa/
素数判定のアルゴリズムは以下のC言語のものを、冪乗の計算を一度に変えたものです。
http://ja.wikipedia.org/wiki/%E7%B4%A0%E6%95%B0%E5%88%A4%E5%AE%9A
今は一度コメントを全部消した状態で貼っておきます。
dcで書いてるので呪文っぽいので理解しようとしないほうが吉です。
そのうちbase64でコメントつけて貼るかもしれません。
factorにすぐやられますから、実用性は無いです。
dashで動くつもりでしたがzshでなければ動きません。
printf %d 010
とした時の挙動の違いに今気付きました。
コメント1件

725
名無しさん@お腹いっぱい。[]   投稿日:2015/06/06 17:42:57
# $1から$2の範囲の素数を出力します。$2が省略された場合は$1一つの数に対して判定します。
# 例: prime 10000 20000
prime ()
{
dc -e "$( seq $1 ${2:-$1} )"'
z sc 0 sr [S2 lr 1 + sr lr lc >!] s! l! x
[[sg 3 Q] sk [p sg 3 Q] s.] sA
[d 2 >k d 2 =. d 2 % 0 =k] sB
[[sg 2 Q] sk [p sg 2 Q] s. d v s^ 3 s/] sC
[l^ l/ >. d l/ % 0 =k l/ 2 + s/ lD x] sD
0 sr
[L2 [lA x lB x lC x lD x]x lr 1 + sr lr lc >@] s@ l@ x
'
}

# 上記、prime関数から得られた適当な素数二つが引数です。
# そこから秘密鍵、公開鍵を出力します。
# 例: keygen 10243 19963
keygen ()
{
dc -e "[$1 1 :a]x [$2 2 :a]x [$1 $2 * 3 :a]x"'
[1 ;a]x 1 - [2 ;a]x 1 - * 2 / 1 + S2
[l2 lr [d la :k]x / [la :p]x la 1 + sa l. x] sA
[[la 1 - ;k]x n [ ] n [la 1 - ;p]x n [ ] n [3 ;a]x p sg] s.
1 sa l2 v s^ 2 sr
[l2 lr % 0 =A lr 1 + sr lr l^ !<B] sB lB x
'
}

726
名無しさん@お腹いっぱい。[]   投稿日:2015/06/06 17:44:29
# 上記、keygenが出力した鍵から適当な一段を使い暗号化し、出力します。
# 例:
# keygen 10243 19963
# > 7 14603629 204481009
# > 17 6013259 204481009
# > 119 859037 204481009
# encrypt 859037 204481009 暗号化するfile >暗号化した後のfile
encrypt ()
{
echo 8 o $( printf "8 i %d 12 i $1 $2 | n [ ] n " $( od -vt oC -A n $3 ) ) |dc
}

# 上記の公開鍵で暗号化したものを、秘密鍵で復号します。秘密鍵は上記の例で暗号化した場合、
# 以下の組み合わせになります。
# encrypt 119 204481009 暗号化されたfile >復号化した後のfile
decrypt ()
{
printf "8 i %d 12 i $1 $2 | P " $( cat $3 ) |dc
}

727
名無しさん@お腹いっぱい。[]   投稿日:2015/06/06 20:13:54
ごめんなさい。素数と素数をかけた数が512以下だと復号に失敗します。

728
名無しさん@お腹いっぱい。[]   投稿日:2015/06/06 20:27:58
# 以下じゃなくて未満か。

# 他に、確認に使ったprogram.
# ずるしてopensslを使っています。

# まず!!!!!!!!復号化するfileに値を入れて下さい!!!!!!!!!!!!!。小さいfileが良いと思います。
# mktempで作るfileは自動では削除しません。最初にechoで出力するので手動でお願いします。

# primeで適当な素数を二つ選択しkeygenを行い、そこで作られた鍵で暗号化したfileを
# 復号できるかの確認です。
# 使い方。
# check_2 $( prime 10000 20000 )

# 出力は、出力した時に確認したkeygenに使った素数二つ,暗号化復号化に使える数字と法です。

729
名無しさん@お腹いっぱい。[]   投稿日:2015/06/06 20:29:33
file=
file_encrypt=$( mktemp )
file_decrypt=$( mktemp )
echo 後で削除する事、$file_encrypt $file_decrypt
check_2 ()
{
test $# -lt 2 && return

p1=$( echo $@ |tr ' ' '\n' |sed -n $(( $( openssl rand 2 \
|od -t u -A n ) % $# + 1 ))p )
while # 使いました!!!
p2=$( echo $@ |tr ' ' '\n' |sed -n $(( $( openssl rand 2 \
|od -t u -A n ) % $# + 1 ))p )
test $p2 -eq $p1
do :
done

f ()
{
test $# -eq 0 && return
encrypt $(( $# % 2 ? $1 : $2 )) $3 $file >$file_encrypt
decrypt $(( $# % 2 ? $2 : $1 )) $3 $file_encrypt >$file_decrypt
diff $file $file_decrypt && echo 成功。keygen $p1 $p2, $1 $2 $3 \
|| echo 失敗。keygen $p1 $p2, $1 $2 $3 1>&2
shift 3
f $@
}
f $( keygen $p1 $p2 )

check_2 $( echo $@ |tr ' ' '\n' |grep -vE "($p1|$p2)" )
}
# rm $file_encrypt $file_decrypt

730
名無しさん@お腹いっぱい。[]   投稿日:2015/06/06 20:36:41
もっと大きい値で確認する場合は、
opensslのrandの値も変える必要があったような気がします。もう忘れました。
現在対したコメント無くてごめんなさい。

731
名無しさん@お腹いっぱい。[sage]   投稿日:2015/06/07 19:13:41
>723 から sed も取り除いてみました
printf '%s + %s - %s * %s / ' '0 0' 0 1 1 "$@" 'p quit' | dc

>724-730 力作ですなぁ

732
10人に1人はカルトか外国人[]   投稿日:2015/06/08 17:47:19
●マインドコントロールの手法●

・沢山の人が偏った意見を一貫して支持する
 偏った意見でも、集団の中でその意見が信じられていれば、自分の考え方は間違っているのか、等と思わせる手法

・不利な質問をさせなくしたり、不利な質問には答えない、スルーする
 誰にも質問や反論をさせないことにより、誰もが皆、疑いなど無いんだと信じ込ませる手法

偏った思想や考え方に染まっていたり、常識が通じない人間は、頭が悪いフリをしているカルト工作員の可能性が高い

靖国参拝、皇族、国旗国歌、神社神道を嫌うカルト

10人に一人はカルトか外国人

「ガスライティング」で検索を!

733
名無しさん@お腹いっぱい。[sage]   投稿日:2015/06/08 21:12:33
forの中で
find /foo -iname "123foo.txt" -o -iname "foo.txt"
をしたくて、"123foo.txt" から"foo.txt"を
作りたいのですけどいい方法を教えていただけないでしょうか?
123は0桁から4桁あります。
よろしくお願いします。

734
名無しさん@お腹いっぱい。[sage]   投稿日:2015/06/08 22:27:29
「シェル 数値 ゼロ梅」でぐぐれ
コメント1件

735
名無しさん@お腹いっぱい。[sage]   投稿日:2015/06/08 23:04:24
シェルっていうと、おじさんたちが激怒になるから気をつけな

736
名無しさん@お腹いっぱい。[sage]   投稿日:2015/06/09 00:33:36
「シェルっていうと」じゃなくて「シェルクリプトのことをシェルっていうと」だ
>734の場合は問題ない

737
名無しさん@お腹いっぱい。[sage]   投稿日:2015/06/09 01:25:54
$ filename1=123foo.txt
$ filename2=$(echo $filename1 | tr -d [0-9])
$ echo $filename2
foo.txt

738
名無しさん@お腹いっぱい。[sage]   投稿日:2015/06/09 01:49:15
数字の部分が必ずファイル名の先頭にかたまって出現するということなら
$ filename=123foo.txt
$ echo ${filename##*[0-9]}
foo.txt

739
名無しさん@お腹いっぱい。[sage]   投稿日:2015/06/09 08:44:03
そうか
trか変数展開をつかうのか
自分は今まで何考えてたんだ
コマンド、変数展開を使いこなせてないことを痛感した
ありがとう

740
名無しさん@お腹いっぱい。[]   投稿日:2015/06/11 16:47:01
いくつかのディレクトリにあるファイルすべてを一括処理してやろうと
foundfiles=$(find /hoge/hoge1 /foo/foo1 -name -type f *.txt)
for x in "${foundfiles}"
do
処理
done
としてみたのですが、うまくいきませんでした。
どこを直せばよいのでしょうか?

741
名無しさん@お腹いっぱい。[sage]   投稿日:2015/06/11 17:10:28
-nameの引数の位置

742
名無しさん@お腹いっぱい。[]   投稿日:2015/06/11 18:04:07
うわぁー、ばかなことやっちまってた
foundfiles=$(find /hoge/hoge1 /foo/foo1 -name *.txt -type f)
for x in "${foundfiles}"
do
処理
done
これでokですか?まだ、怪しいとこありますか?

743
名無しさん@お腹いっぱい。[sage]   投稿日:2015/06/11 18:13:25
findの結果と処理のところにecho入れて
気体通りになってるか確認して終わり
かまう奴はアホか

744
名無しさん@お腹いっぱい。[]   投稿日:2015/06/11 19:55:03
優しいんですね

745
名無しさん@お腹いっぱい。[]   投稿日:2015/06/12 12:06:31
foundfiles=$(find /hoge/hoge1 /foo/foo1 -name *.txt -type f)
for x in "${foundfiles}"
do
echo "$x"
done

とやると一見上手くいったように見えましたが、

foundfiles=$(find /hoge/hoge1 /foo/foo1 -name *.txt -type f)
for x in "${foundfiles}"
do
echo "${x##*/}"
echo "$x"
done
としてやると、初めのファイルのファイル名だけ出てきて、あとは検索結果が表示されるだけでした。
なにがまずかったのですか?直すことはできるのでしょうか? 👀
Rock54: Caution(BBR-MD5:0be15ced7fbdb9fdb4d0ce1929c1b82f)

746
名無しさん@お腹いっぱい。[sage]   投稿日:2015/06/12 13:33:39
ダブルクォートはどんなときに使えばいいのかどんなときに使わないのか
そのあたりがわかってないみたい
がんばれ

747
名無しさん@お腹いっぱい。[]   投稿日:2015/06/12 14:39:13
"${foundfiles}"のダブルクォートを外したらできました。

なんでなんだろう?
for x in "$@"
というのをよく見かけるからまねしてました。

"${foundfiles}"は検索結果を1つの文字列にする。
なら、"$@"は?あれれ?
どういうことなのでしょうか?
コメント1件

748
名無しさん@お腹いっぱい。[sage]   投稿日:2015/06/12 14:43:19
シェルスクリプトの本でも一冊買ってきてまじめに勉強しろ
そうしない身に付かない

749
名無しさん@お腹いっぱい。[sage]   投稿日:2015/06/12 14:49:36
find の結果を使って何かするなら、for while xargs findのexec 等を使うけど、
for で変数に入れて回す場合、IFSに改行をセットして、区切ってもらうために変数をクォートはしない

#!/bin/sh -x
var='
a b c d e
2OrMoreSpaces between the words
x y z
'

IFS='
'

# for i in "${var}"
for i in ${var}
do
 echo "=> $i <="
done

応援するよ。がんばって

750
741[sage]   投稿日:2015/06/12 15:27:47
>6 E.1 を中心に、man bsh、man dash で学習

□E. 学習用テキスト
1. Bourne Shell自習テキスト ( 1993年 ) pdf お薦め



一応、引用しといた
man dash
@ Expands to the positional parameters, starting from one.
  When the expansion occurs within double-quotes, each posi‐
  tional parameter expands as a separate argument. If there
  are no positional parameters, the expansion of @ generates
  zero arguments, even when @ is double-quoted. What this
  basically means, for example, is if $1 is “abc” and $2 is
  “def ghi”, then "$@" expands to the two arguments:
    "abc" "def ghi"

$1 が "abc"で、$2 が "def ghi" のとき、"$@" は "abc" "def ghi" に展開される

751
名無しさん@お腹いっぱい。[sage]   投稿日:2015/06/12 15:31:58
読みなおしてよかったよ man bsh なんて

訂正 man bash、man dash

752
名無しさん@お腹いっぱい。[]   投稿日:2015/06/13 13:45:25
ありがとう
ネット上の記述とmanで今までなんとかこなせてたけど
基本がないとだめですね
早速、>6を読んでみます

753
名無しさん@お腹いっぱい。[sage]   投稿日:2015/06/13 20:52:58
>747
foundfiles=( $(find /hoge/hoge1 /foo/foo1 -name *.txt -type f) ) ←配列にする
for x in "${foundfiles[@]}"

でおk
コメント1件

754
名無しさん@お腹いっぱい。[]   投稿日:2015/06/15 13:27:36
ありがとう
それでできました
()はコマンド置換だけじゃないんですね

755
名無しさん@お腹いっぱい。[sage]   投稿日:2015/06/15 13:44:30
コマンド置換は $( )

756
名無しさん@お腹いっぱい。[sage]   投稿日:2015/06/15 23:58:45
$() で思い出したけど
-----------------------
#!/bin/bash

LAST=0

function test() {
LAST=$1
echo $LAST
}

echo "LAST=$LAST"
test 111
echo "LAST=$LAST"
x=$(test 222)
echo "LAST=$LAST x=$x"
--------------------------
を実行すると

LAST=0
111
LAST=111
LAST=111 x=222 ←なぜ LASTが 222に変更されないのか?

実際は関数のネストとかでもっと複雑だったんだが、
変な動作するようになってデバッグに苦労した・・・

757
名無しさん@お腹いっぱい。[sage]   投稿日:2015/06/16 00:33:43
えっ? 釣り?

758
名無しさん@お腹いっぱい。[sage]   投稿日:2015/06/16 00:48:56
サブシェルで実行されるから

759
名無しさん@お腹いっぱい。[sage]   投稿日:2015/06/17 12:27:35
>753
スペース入りファイル名に未対応、失格。
コメント1件

760
名無しさん@お腹いっぱい。[sage]   投稿日:2015/06/17 13:55:31
>759
では模範解答をどうぞ

761
名無しさん@お腹いっぱい。[sage]   投稿日:2015/06/17 20:41:26
IFS_tmp=$IFS; IFS=$’\n’

762
名無しさん@お腹いっぱい。[sage]   投稿日:2015/06/17 21:21:37
改行入りファイル名に未対応、失格。

763
名無しさん@お腹いっぱい。[sage]   投稿日:2015/06/17 21:25:36
最終模範解答

IFS_tmp=$IFS; IFS=$"\n"

764
名無しさん@お腹いっぱい。[sage]   投稿日:2015/06/18 05:55:23
改行入りファイル名に未対応、失格。

765
名無しさん@お腹いっぱい。[sage]   投稿日:2015/06/18 07:35:13
スペース等だけじゃなく、アスタなどの特殊記号にも未対応、失格。

766
名無しさん@お腹いっぱい。[sage]   投稿日:2015/06/18 07:48:16
そんなファイルは作らなければ解決。

767
名無しさん@お腹いっぱい。[]   投稿日:2015/06/18 10:04:59
だったら全部""でくくっておけばいいでないの?

768
名無しさん@お腹いっぱい。[sage]   投稿日:2015/06/18 10:17:46
find ... -exec ... +
を避ける理由は?

769
名無しさん@お腹いっぱい。[sage]   投稿日:2015/06/23 21:09:03
find -print0 | xargs -0
でスペースや改行の入ったファイル名もOKだよね
unix仕様のファイル名の終端はNULLだったっけ?
コメント1件

770
名無しさん@お腹いっぱい。[sage]   投稿日:2015/06/24 07:32:33
>769 パイプとプロセスが無駄
find ... -exec ... +
を避ける理由は?
コメント1件

771
名無しさん@お腹いっぱい。[sage]   投稿日:2015/06/24 15:25:39
>770
それ使うのは初心者で、逆に実行効率が悪くなる。
コメント1件

772
名無しさん@お腹いっぱい。[sage]   投稿日:2015/06/24 15:43:54
>771
理由は?

773
名無しさん@お腹いっぱい。[sage]   投稿日:2015/06/24 15:44:35
-execだと見つかったファイルの数だけプロセスつくるんだよね?
xargsだとexecシステムコールの引数個数制限までは1個のプロセス作ってその引数に見つかったファイル全部渡すのかな?
コメント2件

774
名無しさん@お腹いっぱい。[sage]   投稿日:2015/06/24 15:53:10
>773
> find ... -exec ... +
これの最後の+の意味調べないで、言いがかりつけてんの?

775
名無しさん@お腹いっぱい。[sage]   投稿日:2015/06/24 20:58:37
さすがに恥ずかしくて逃げ出したか。

776
名無しさん@お腹いっぱい。[sage]   投稿日:2015/06/26 03:14:09
mvとかで使えない中途半端なもの出されてドヤ顔されてもなあ

777
名無しさん@お腹いっぱい。[sage]   投稿日:2015/06/26 08:16:34
逃げ出さなかったメンタルだけは褒めてあげよう。
find . -exec sh -c 'mv "$@" hoge' {} +
今度は逃げ出すかな?
コメント2件

778
名無しさん@お腹いっぱい。[sage]   投稿日:2015/06/26 08:48:53
>777
それ、1番目に見つかったファイル(ディレクトリ)のみ取りこぼすバグあり。

find . -exec sh -c 'mv "$@" hoge' DUMMY {} +
DUMMYが必要。

779
名無しさん@お腹いっぱい。[sage]   投稿日:2015/06/26 09:07:10
何だよ、そのDUMMYって。意味ねーどころか、エラー出るし。

xargsと比べてって事だから、省略したけど、.を避けるのはfindでやるんだろ。
あえてやるなら
find . -exec sh -c 'shift; mv "$@" hoge' {} +

xargs押しのベテランさんはどうするんだろう?
初心者に教えてくださいな。
コメント2件

780
名無しさん@お腹いっぱい。[sage]   投稿日:2015/06/26 09:11:18
>777
プロセスが無駄とか言っておきながらsh使うってバカなの?
しかもファイル数に比例した分だけ起動するから、一つで済むxargs以下じゃん。やっぱりバカだろ。
コメント2件

781
名無しさん@お腹いっぱい。[sage]   投稿日:2015/06/26 09:21:57
>779
オマエ、DUMMYの意味わかってないのか。
shiftしたら逆だぞ、引数「2個」取りこぼす。

shiftの逆(そんなのないけど)をやる必要があるんだよw
コメント1件

782
名無しさん@お腹いっぱい。[sage]   投稿日:2015/06/26 09:31:47
>779
$ sh -c 'echo "$@"' 1 2 3 4
2 3 4


↑なぜ 1 が消えるかわかるかな?

$ sh -c 'echo "$@"' DUMMY 1 2 3 4
1 2 3 4

↑DUMMYを入れると 1 を取りこぼさないねw

783
名無しさん@お腹いっぱい。[sage]   投稿日:2015/06/26 11:33:10
>780
ベテラン(老害ともいう)登場。
おじいちゃんが現役時代のfindはそうだったらしいけど、今のfindはもっとお利口なんだよ。
おじいちゃんが現役だったころは
find ... -exec ..... \;
だっただろ。今は
find ... -exec ..... +
ってやるんだよ。

>781-782 これはスマンかった。これだね
| sh -c string [name [arg ...]]

でも、shiftは$1以降に対して働くから
> shiftしたら逆だぞ、引数「2個」取りこぼす。
キミもわかってないね。
コメント1件

784
名無しさん@お腹いっぱい。[sage]   投稿日:2015/06/26 11:51:05
エントリが沢山あって複数回起動されるかもしれないので、$1がカレントディレクトリの時だけshiftにした方が良いね。

785
名無しさん@お腹いっぱい。[sage]   投稿日:2015/06/26 11:55:14
あえて DUMMY を外すとしたら、こんな感じかな
sh -c 'echo "${1:+"$0" "$@"}"' 1 2 3 4

煽りぎみの言葉(言いがかり、逃げ出した、メンタルだけは褒めてあげよう、バカ)を
無闇に使うのは止めてさあ、楽しくいこう

これだけ知ってりゃあ良いでしょ
歴史的には -print0 は GNU find の、-exec + は他の多くの Unix での拡張で、
移植の際は注意が必要だったが、-exec + が 2001年版から POSIX に記載された事で
GNU find でも 2005 年頃( ver 4.2.12 )から -exec + が使える様になった
新しく書くスクリプトでは xargs の別の機能を使う場合を除いて find -exec + の方が良いだろう

ちなみに -exec + も SVR4 からあるようだよ
http://www.in-ulm.de/~mascheck/various/find/
> Actually it originates from SVR4 ('88), where it was not documented yet (this feature implemented by
> D.Korn, see two messages from the austin-group-list, local copies),
コメント1件

786
名無しさん@お腹いっぱい。[sage]   投稿日:2015/06/26 12:06:22
$0 だけしか無い際の考慮が足りなかったけど、下らないので訂正は省略します

787
名無しさん@お腹いっぱい。[sage]   投稿日:2015/06/26 12:11:39
動作変わったら場合分けしないと使えないから長くなるな。

788
名無しさん@お腹いっぱい。[sage]   投稿日:2015/06/26 13:06:31
>783
なにを指摘されたのかも理解していないようだ
コメント1件

789
名無しさん@お腹いっぱい。[sage]   投稿日:2015/06/26 13:08:31
>785
>新しく書くスクリプトでは xargs の別の機能を使う場合を除いて find -exec + の方が良いだろう

よくない、という指摘をしてるんだが...

790
名無しさん@お腹いっぱい。[sage]   投稿日:2015/06/26 17:04:27
>788
なにを指摘されたのかも理解していないようだ
コメント1件

791
名無しさん@お腹いっぱい。[sage]   投稿日:2015/06/26 18:36:29
念の為貼っておきますよ
http://pubs.opengroup.org/onlinepubs/9699919799/utilities/find.html

http://www.jp.freebsd.org/cgi/mroff.cgi?subdir=man&;lc=1&cmd=&man=find&dir=jpman-5.4.0%2Fman&sect=0#sect3
> -exec utility [argument ...] {} +
>  -exec と同じですが、各 utility の起動において ``{}'' はなるべく多
>  くのパス名と置き換えられます。この動作は xargs(1) のものに似てい
>  ます。

http://linuxjm.osdn.jp/html/GNU_findutils/man1/find.1.html
> -exec command {} +
>  アクション -exec のこの変形も、選択したファイルに対して指定したコマンドを実行するが、
> コマンドラインを形成するとき、選択した各ファイル名をコマンドラインの末尾に
> 追加して行くという方法を取る(訳注: 略)。
> そのため、コマンドを呼び出す回数は、マッチしたファイルの数より ずっと少なくてすむわけだ。
> コマンドラインの形成法は、xargs のコマンドライン形成法とほぼ同じである。
コメント1件


792
名無しさん@お腹いっぱい。[sage]   投稿日:2015/06/26 18:48:07
理解できましたかあ? おじいちゃん。
コメント1件

793
名無しさん@お腹いっぱい。[sage]   投稿日:2015/06/26 22:37:52
>sh -c 'echo "${1:+"$0" "$@"}"' 1 2 3 4
こんなの書かなきゃいけなくなる場合ならxargsでいい気がする

794
名無しさん@お腹いっぱい。[sage]   投稿日:2015/06/26 23:30:59
>790
バカはすぐオウム返しするよな。

795
名無しさん@お腹いっぱい。[sage]   投稿日:2015/06/26 23:32:45
>791
それを貼って、何の意味があるの?
コメント1件

796
名無しさん@お腹いっぱい。[sage]   投稿日:2015/06/27 00:07:20
>795
-exec + を分かっていなさそうな発言 >773 に加え >780 でも見られ、
話がかみ合っていない原因かもしれないと考え、念の為貼っておいた

ちなみに >792 は別人
コメント1件

797
名無しさん@お腹いっぱい。[sage]   投稿日:2015/06/27 00:25:43
>796
お前、プロセスの数も数えられないの?
日本語も読めないようだし、本当、生きてて大丈夫か?
コメント1件

798
名無しさん@お腹いっぱい。[sage]   投稿日:2015/06/27 07:41:59
悪いけど相手はしない

799
名無しさん@お腹いっぱい。[sage]   投稿日:2015/06/27 08:10:57
>797
おじいちゃんの頃はステップ関数は比例って習ったの?
今はちがうんだよ。

800
名無しさん@お腹いっぱい。[sage]   投稿日:2015/06/27 13:57:24
なんだ、さんざん煽っておいて、自分が逃げてやんの。

801
名無しさん@お腹いっぱい。[sage]   投稿日:2015/06/27 18:01:58
ん? おじいちゃんの基準では
限定的な条件でxargsの方がファイル数/MAX_ARGSだけプロセス数が少ないから勝ちなの?
はいはい、えらいえらい。

802
名無しさん@お腹いっぱい。[sage]   投稿日:2015/06/27 19:42:45
一番最初に煽ったバカの基準がそれだろ。
+は使い物にならんとか親切に教えてあげたら、
shとか持ち出す本末転倒ぶりを晒してるだけじゃん。
いい加減逆ギレはみっともないよ。

803
名無しさん@お腹いっぱい。[sage]   投稿日:2015/06/27 20:48:29
パイプが不要なのには目をつぶるんだ。
おじいちゃんの世代って、わかりやすくて楽だね。

804
名無しさん@お腹いっぱい。[sage]   投稿日:2015/06/27 22:37:52
プロセスの数が増えたら余計非効率だと何回言えば分かるんだ?
コメント1件

805
名無しさん@お腹いっぱい。[sage]   投稿日:2015/06/28 07:24:37
find /dir -オプション ... -exec mv -t ディレクトリ {} +

↑で解決。不要プロセスなし。

806
名無しさん@お腹いっぱい。[sage]   投稿日:2015/06/28 16:41:15
解決とか言ってる割りに、比較した結果が貼られてないから机上の空論だね。

807
名無しさん@お腹いっぱい。[sage]   投稿日:2015/06/28 17:03:28
アスペは放置で。

808
名無しさん@お腹いっぱい。[sage]   投稿日:2015/06/28 22:54:42
CPUの頭打ちだからマルチコアっていう時代にパイプに神経質とか何

809
名無しさん@お腹いっぱい。[]   投稿日:2015/06/29 11:33:48
テキスト中の文字列abc123をabcAA123にしようとsedで
sed -e 's/[a-z][0-9]/.00./g' やsed -e 's/[a-z][0-9]/[a-z]AA[0-9]/g' を
試しましたがうまくいきませんでした。
どのようにすればよいのでしょうか?sed以外でできるのでしょうか?

810
名無しさん@お腹いっぱい。[sage]   投稿日:2015/06/29 12:03:55
sed -e 's/\([a-z][a-z]*\)\([0-9][0-9]*\)/\1AA\2/g'

811
名無しさん@お腹いっぱい。[sage]   投稿日:2015/06/29 12:06:03
+でよかったか・・・

sed -e 's/\([a-z]+\)\([0-9]+\)/\1AA\2/g'

812
名無しさん@お腹いっぱい。[]   投稿日:2015/06/29 12:21:46
echo abc123|sed -e 's/\([a-z]+\)\([0-9]+\)/\1AA\2/g'
をやってみましたがだめでした。なんでだろう。
manをみると2005年のものでした。

813
名無しさん@お腹いっぱい。[]   投稿日:2015/06/29 13:47:40
+を外したらでました
バージョンのせいかな
勉強になりました
ありがとうございました
コメント1件

814
名無しさん@お腹いっぱい。[sage]   投稿日:2015/06/29 13:57:57
どのsedを使ってるのかわからんし
どのmanを読んでるのかわからん

815
名無しさん@お腹いっぱい。[sage]   投稿日:2015/06/29 14:26:49
憶測で書いてみるけど、「古来の sed の正規表現では + が使えないが
GNU sed では + が使える」というオチの予感がします。

# 今ちょっと調べてみるまで GNU sed で + が使えるとは知らなかった……

816
名無しさん@お腹いっぱい。[sage]   投稿日:2015/06/29 14:40:06
坊や、もうちょっと勉強してからおいで、としか

817
名無しさん@お腹いっぱい。[sage]   投稿日:2015/06/29 19:01:07
debian系でスクリプト作ってVMで軽いDSLで動かそうとしたら
使ってるコマンドのオプションが違ってて使えなかったなあ

まあ最新のパッケージ落とせばよかったんだろうけど皆はどうしてる?

818
名無しさん@お腹いっぱい。[sage]   投稿日:2015/06/29 20:34:14
>813
+ じゃなくて \+ ではどうよ?
echo abc123 | sed -e 's/\([a-z]\+\)\([0-9]\+\)/\1AA\2/g'
コメント1件

819
名無しさん@お腹いっぱい。[sage]   投稿日:2015/06/29 21:17:14
興味でお聞きしたいのですが
シェルスクリプトで株の発注のようなことはできませんかね?
証券会社にログインしフォーム入力して発注ボタン押すような・・
そんな言語じゃないと思うのですができたら人気出るかなあと
コメント2件

820
名無しさん@お腹いっぱい。[sage]   投稿日:2015/06/29 21:20:48
人気じゃなくて覚える気でした

821
名無しさん@お腹いっぱい。[sage]   投稿日:2015/06/29 21:26:58
シェルスクリプトで出来ないことなんて何もない
コメント1件

822
名無しさん@お腹いっぱい。[sage]   投稿日:2015/06/29 21:38:54
シェルスクリプトを覚えたら彼女が出来ました

823
名無しさん@お腹いっぱい。[sage]   投稿日:2015/06/29 21:41:19
フフフ
昔、シェルスクリプトでロト6の番号を出していたのはいい思い出
一度も当たらなかったけどな・・・
コメント1件

824
名無しさん@お腹いっぱい。[sage]   投稿日:2015/06/29 21:53:20
>819
できるし、発想はわかるが
アルゴリズム取引の時代にシェルスクリプトではだぶん勝負にならない
コメント1件

825
名無しさん@お腹いっぱい。[sage]   投稿日:2015/06/29 22:08:23
>819
>349とか>371は知ってる?
コメント1件

826
名無しさん@お腹いっぱい。[sage]   投稿日:2015/06/29 23:36:01
>823
ロト6、わたしも時々やっています。シェルスクリプトで番号を出すのは考えもしませんでしたw
>821
>824
>825
ご親切にありがとうございました
grepとかのパイプ並列化されてると聞いたので、もしかしてなにかしら分からない理由で発注も早いのかなと
思って聞いてみました。
>349>371は知りませんでした。勝手にシェルスクリプトっていうとブラウザレスのワンライナーをイメージしていました。
教えていただいた348や370を触ってみようと思います

827
名無しさん@お腹いっぱい。[sage]   投稿日:2015/06/30 00:21:38
ぶっちゃけwget使えばできる
コメント1件

828
名無しさん@お腹いっぱい。[sage]   投稿日:2015/06/30 00:51:21
むしろシェルスクリプトでパケットキャプチャして通信を解析しよう。

829
名無しさん@お腹いっぱい。[sage]   投稿日:2015/06/30 06:02:29
>827
JavaScriptとか使われてたらwgetでは無理
コメント1件

830
名無しさん@お腹いっぱい。[sage]   投稿日:2015/06/30 07:54:44
>818
GNU sedでも+は使えないと思っていたけど\+なんて拡張があるんだね。
知らなかった。今後は便利に使わせてもらおう…

831
名無しさん@お腹いっぱい。[]   投稿日:2015/06/30 10:54:23
ブラウザのクッキーが必要で、JavaScriptで得られるリンクの抽出をしたいのですが
ソースを保存してgrepで試したのですがうまくいきませんでした。
なにかいい方法ありますか。
コメント2件

832
名無しさん@お腹いっぱい。[sage]   投稿日:2015/06/30 11:12:25
もうちょい条件を具体的に

833
名無しさん@お腹いっぱい。[sage]   投稿日:2015/06/30 12:12:09
>829>831
wgetでも切った貼ったすればURLは作れる
まあそれでカバーできないのもあるだろうから100%じゃないけど
自分はフレームが分かれてるページで挫折したというか対応をやめた
コメント1件

834
名無しさん@お腹いっぱい。[sage]   投稿日:2015/06/30 12:24:48
ブラウザで操作するようなものは
firefoxのアドオンで使えるseleniumが便利なんじゃないかな
コメント2件

835
名無しさん@お腹いっぱい。[sage]   投稿日:2015/06/30 13:49:39
トイレで大きな音って屁だろ

836
名無しさん@お腹いっぱい。[sage]   投稿日:2015/06/30 13:50:38
誤爆しましたごめん

837
名無しさん@お腹いっぱい。[sage]   投稿日:2015/06/30 19:21:47
>833, >834
しらべてみる
ありがとう

838
名無しさん@お腹いっぱい。[sage]   投稿日:2015/07/01 00:58:33
>804
おじいちゃん。-exec .... +を知らなかった事を必死にごまかそうとしてもダメだよ。


765 名無しさん@お腹いっぱい。[sage] 2015/06/24(水) 15:44:35.63

-execだと見つかったファイルの数だけプロセスつくるんだよね?
xargsだとexecシステムコールの引数個数制限までは1個のプロセス作ってその引数に見つかったファイル全部渡すのかな?

839
名無しさん@お腹いっぱい。[sage]   投稿日:2015/07/01 01:13:29
つまんね。

840
名無しさん@お腹いっぱい。[sage]   投稿日:2015/07/01 07:46:12
GNU sedで -rオプション、*BSD sedで -Eオプションつけるとバックスラッシュ
つけなくても+が使えるみたいだ。

841
名無しさん@お腹いっぱい。[sage]   投稿日:2015/07/01 13:58:10
そりゃ、そっちは拡張正規表現だからな……

842
名無しさん@お腹いっぱい。[sage]   投稿日:2015/07/01 14:36:35
最近、ポイントがずれた応答するヤツ一人いるなぁ

843
名無しさん@お腹いっぱい。[sage]   投稿日:2015/07/01 15:04:35
わざとだろう
あんまり相手しちゃいけない

844
名無しさん@お腹いっぱい。[sage]   投稿日:2015/07/02 08:18:40
言葉が足りなかった。拡張機能なのに素の状態でバックスラッシュつければ
動いてしまうのはどうなのかな?と思ったんだ。

845
名無しさん@お腹いっぱい。[]   投稿日:2015/07/02 18:33:26
>834

JSなページもいけるらしいが、実際やってみたら、サイトを開く、
ボタン押すなどは記録してくれるが、スクロールするとか、細かい
事は記録されなかった。画像をキャプチャしたいんだが無理の模様。
シェルスクリプトで書こうとして、LinksをJava対応とかにしてみた
ものの、努力実らず。。。

846
名無しさん@お腹いっぱい。[]   投稿日:2015/07/02 18:41:44
>831

もしかして、ローカルマシンでの話か?

847
名無しさん@お腹いっぱい。[sage]   投稿日:2015/07/02 19:10:07
bashでの正規表現、コマンドごとの正規表現。
最初はバカばかしく思えた、たとえばpythonでの

import re

のほうが、思想としては正しいような気がしてきた。

848
名無しさん@お腹いっぱい。[sage]   投稿日:2015/07/02 23:42:14
bashで
aaa=$(( bbb + ccc ))
という表記の仕方と
aaa=$(( $bbb + $ccc ))
という表記の仕方、どちらも同じ計算結果が得られるんですが
どちらが正しいんでしょうか?どちらで書いても良い仕様なんでしょうか?
コメント2件

849
名無しさん@お腹いっぱい。[sage]   投稿日:2015/07/03 00:54:37
>848
yes

function add() # 引数の$1と$2を足す
{
ANSWER=$(( $1 + $2 ))
}

こういうのは $は取れないけどね

850
名無しさん@お腹いっぱい。[sage]   投稿日:2015/07/03 05:34:00
どうせなら、

((aaa = bbb + ccc))

って書いた方がいい。この方が数値計算らしいね。

851
名無しさん@お腹いっぱい。[sage]   投稿日:2015/07/03 09:11:41  ID:B0CP9/Q5n(2)
>848
白い白馬みたいなものでしょ
$var ${var} $((var)) $((勝手にやれや))

852
名無しさん@お腹いっぱい。[sage]   投稿日:2015/07/03 09:48:26
俺は let aaa=bbb+ccc が好きだな

853
名無しさん@お腹いっぱい。[]   投稿日:2015/07/03 14:16:50
sortせずにuniqしたいんですが、エレガントな方法ありますか?
2回目以降に出てきた重複行をカットして出力です。それ以外はsortしないで元の順のまま出力。
コメント2件

854
名無しさん@お腹いっぱい。[sage]   投稿日:2015/07/03 14:50:45  ID:B0CP9/Q5n(2)
perlやらrubyやらでさっくりと。

855
名無しさん@お腹いっぱい。[sage]   投稿日:2015/07/03 14:52:23  ID:A2U8YBDtR
こっちで答えても質問者読んでないから
.netの方で答えてあげて

856
名無しさん@お腹いっぱい。[sage]   投稿日:2015/07/03 14:44:25

857
名無しさん@お腹いっぱい。[sage]   投稿日:2015/07/03 14:55:42
>856
その方法しかありませんか?
頭に数値付ける方法は知ってましたがエレガントじゃないです

858
名無しさん@お腹いっぱい。[sage]   投稿日:2015/07/03 15:20:13
ちょっといじれば数字なしにできるよ

859
名無しさん@お腹いっぱい。[sage]   投稿日:2015/07/03 18:44:31
{
 if (count[$0] == 0) {
  print
  count[$0]++
 }
}

860
名無しさん@お腹いっぱい。[sage]   投稿日:2015/07/03 19:39:34
シェルでは連想配列は使えまへん

861
名無しさん@お腹いっぱい。[sage]   投稿日:2015/07/03 19:41:35
awkだろw

862
名無しさん@お腹いっぱい。[sage]   投稿日:2015/07/03 20:13:46
Perlの連想配列便利
何も考えずにVBで同じようにやったらクソ遅かった

863
名無しさん@お腹いっぱい。[sage]   投稿日:2015/07/03 21:11:40
bash なら連想配列使えるけど遅いので素直に awk でやるのが一番

864
名無しさん@お腹いっぱい。[sage]   投稿日:2015/07/04 20:45:32
curl -L -O -J http://www.foo.com/bar
をやると、リダイレクト先のファイル名で保存されずにbarで保存されてしまう
リダイレクト先のファイル名で保存するにはどうすればできますか?
コメント3件

865
名無しさん@お腹いっぱい。[sage]   投稿日:2015/07/04 21:03:45
日本語お上手ですね

866
名無しさん@お腹いっぱい。[sage]   投稿日:2015/07/04 22:57:10
わからないなら黙ってればいいのに

-Iで情報取得してgrep、sed、展開で抽出

867
名無しさん@お腹いっぱい。[sage]   投稿日:2015/07/04 23:36:06
すまん、これだと改行が入ってしまう
解決法はわからない

868
名無しさん@お腹いっぱい。[sage]   投稿日:2015/07/04 23:37:41
>864
curl -L -J http://www.foo.com/bar > foo

じゃだめなん?
コメント1件

869
名無しさん@お腹いっぱい。[sage]   投稿日:2015/07/05 00:24:31
展開で%%と*を使えばいい
sedはめんどくさい

870
名無しさん@お腹いっぱい。[sage]   投稿日:2015/07/05 06:16:53
foo.comの人って日本人なんですか?

871
名無しさん@お腹いっぱい。[sage]   投稿日:2015/07/05 08:51:57
whoisでも見りゃいいだろ

872
名無しさん@お腹いっぱい。[sage]   投稿日:2015/07/05 09:11:05
>868
リダイレクト先のファイル名を取得したいのに決め打ちしてどうするw

873
名無しさん@お腹いっぱい。[sage]   投稿日:2015/07/05 11:13:12
>853
nl | sort -k 2 | uniq -f 1 | sort | cut -f 2-

>864
http://stackoverflow.com/questions/6881034/curl-to-grab-remote-filenam...



何か違和感が有るが、まあいいか

874
名無しさん@お腹いっぱい。[]   投稿日:2015/07/07 01:55:38
集団ストーカーももう時間切れかもしれないよ
予定よりも相当早いペースで突き進んでるよ
ギリシャのこと笑ってられないかもしれない
潰れる会社も出るだろうし、失業者も出るかもしれない
アウシュビッツレベルのネタだからオリンピックどころじゃないかもしれない
私の勝手な想像だけどね
でもバレテルよと何年も前から言ってるのに今日もバカの一つ覚えの電気通信で嫌がらせ
だからみんながそれが答えなのね、世界中に暴露して聞いてみろってことなのね
ということで動きが止まらない方向になっている
揉み消すとか臭いものにふたをする犯罪者の心理行動しか取れないクズは終わりかもしれない
観光客がちょっと増えたと喜んでいる場合じゃないよ、知っている人間は日本なんかに来てないよ
事実は言った人間が悪いんじゃないよ、作った人間が悪いんだよ
知ってる人間は後悔しないためにも正しい行動をしたほうがいいよ
ダメなものは世界中誰が見てもダメなんだからね

875
名無しさん@お腹いっぱい。[sage]   投稿日:2015/07/07 17:07:44
>864

barって、ディレクトリ? ファイル?

876
名無しさん@お腹いっぱい。[sage]   投稿日:2015/07/11 02:16:43
メタ文字を含むパターンを変数に入れておいて
${var#pattern}
みたいな使い方はできないのですか?
コメント1件

877
名無しさん@お腹いっぱい。[sage]   投稿日:2015/07/11 05:21:37
>876
できるけど。

${var#$pattern}

patternに$が必要
コメント1件

878
名無しさん@お腹いっぱい。[sage]   投稿日:2015/07/12 06:30:34
>877
すみません、$ が抜けていました
どうやら zsh のデフォルトの仕様のせいで、
GLOB_SUBST オプションを有効にするか、${var#$~pattern} で望みどおりになりました

879
名無しさん@お腹いっぱい。[sage]   投稿日:2015/07/12 23:45:48
for f inの中でsedでの置換に$fを使うには度すればいいのですか?

880
名無しさん@お腹いっぱい。[sage]   投稿日:2015/07/13 03:08:28
sed -e "s/$f/fumofumo/"

とか

881
名無しさん@お腹いっぱい。[sage]   投稿日:2015/07/13 04:53:41
全部ダブルクォートにせずに、必要なところだけダブルクォートにするのがお勧め。

sed '/aaa/,$s/'"$f"'/bbbb/g'
コメント2件

882
名無しさん@お腹いっぱい。[sage]   投稿日:2015/07/13 13:45:08
count=1
for f in
do
file_name="${f##*/}"
sed -e 's/foo/foo_$f/g' /hoge/hoge.txt> ${count}_hoge.txt
mv $f ${par_dir2}/${file_name}
count=$(($count + 1))
done
これはダメ

sed -e 's/foo/foo_"$f"/g'
もだめでした

なんでだろう?
コメント1件

883
名無しさん@お腹いっぱい。[sage]   投稿日:2015/07/13 13:50:39
>882
クォートの対応、良く見ろよ

sed -e 's/foo/foo_"$f"/g' ←じゃなくて
sed -e 's/foo/foo_'"$f"'/g'

な。' 'を一回閉じてから" "を開き直す。スペースを空けずに。
コメント1件

884
名無しさん@お腹いっぱい。[sage]   投稿日:2015/07/13 16:07:08
(全部ダブルクオートでいいのに・・・)

885
名無しさん@お腹いっぱい。[sage]   投稿日:2015/07/13 17:05:32
クォートなんていらないのに・・・と思いかけたが$fの中身がわからないから必要なのか
というか$fだけをダブルクォートでも問題ないのかな?

886
名無しさん@お腹いっぱい。[sage]   投稿日:2015/07/13 20:53:18
ファイル名を構成する文字とsedの正規表現の区切り問題は厄介だよ。

887
名無しさん@お腹いっぱい。[sage]   投稿日:2015/07/13 23:15:54
>881
全部ダブルでええやん

888
名無しさん@お腹いっぱい。[sage]   投稿日:2015/07/13 23:41:43
>881
/aaa/,$ 文字列aaaとマッチする行から行末まで次のコマンドを適用
s/"$f"/bbbb/g シェル変数$fとマッチした文字列をbbbbに置き換えるコマンド
全体をダブルクォートしたら$sがシェル変数として解釈されちゃうからいやん

889
名無しさん@お腹いっぱい。[sage]   投稿日:2015/07/13 23:50:57
行末までじゃねえや最終行までね

890
名無しさん@お腹いっぱい。[sage]   投稿日:2015/07/14 03:14:11
>883
sed -e 's/foo/foo_'"$f"'/g'
でいけました。
クォートの挙動の勉強になりました。
ありとうございます。

891
名無しさん@お腹いっぱい。[sage]   投稿日:2015/07/18 11:58:15
あるコマンドの出力をgrepで引っ掛けたいんだけど、できない・・・
何故でしょう。わかる方いますか

$ postmulti -i hogehoge -e destroy
postmulti: fatal: No instance named hogehoge

上のように、Noという文字列が出力されたら処理をしたいので

$ postmulti -i hogehoge -e destroy 2>&1 | grep No
$

とするが、ヒットしない。
コメント1件

892
名無しさん@お腹いっぱい。[]   投稿日:2015/07/18 12:10:12
* 1,2以外に出力されている。(プログラム中で/dev/tty開けるとか)
* 何か間違えている。
前者は
$ postmulti -i hogehoge -e destroy >/dev/null
$ postmulti -i hogehoge -e destroy 2>/dev/null
で確認すれば良い。
コメント1件

893
名無しさん@お腹いっぱい。[sage]   投稿日:2015/07/18 12:21:00
>891 の後半、| grep No でヒットしなくて、しかも何も表示でないんだよね?
fdの1,2以外とか/dev/tty直接に出力されてるなら素通りの表示はされるはず。
なので、postmultiが出力がパイプの場合は出力を自分で抑制してるのかも。
コメント1件

894
名無しさん@お腹いっぱい。[sage]   投稿日:2015/07/18 12:29:23
daemon系で、fork()とかsetsid()とか絡んでそうな悪寒
コメント1件

895
880[sage]   投稿日:2015/07/18 13:58:51
>892
>893

$ postmulti -i hogehoge -e destroy >/dev/null
postmulti: fatal: No instance named hogehoge

$ postmulti -i hogehoge -e destroy 2>/dev/null
$

確認すると、こんな感じ
なので確実に2番ですよね

だが、ファイルに書き出しても
$ postmulti -i hogehoge -e destroy 2>output
$ cat output
なにもでない。



>894
そうなんですか。
ちょっと調べてみます

896
名無しさん@お腹いっぱい。[sage]   投稿日:2015/07/18 14:55:40
やっぱり tty か redirect/pipe か判断してるみたい

Linux で以下を実行すると output ファイルにエラーメッセージが
書き込まれている。

$ echo 'int isatty(int fd) { return 1; }' | gcc -xc -shared -o isatty.so -
$ LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH LD_PRELOAD=isatty.so postmulti -v -i hogehoge -e destroy 2>output
コメント1件

897
名無しさん@お腹いっぱい。[sage]   投稿日:2015/07/18 17:24:55
>896
ありがとうございます!
上のコード理解してきました。そういうことなのですね。

一応ソースも確認したけど、その通りでした
postfix-3.0.1: ./src/postmulti/postmulti.c
1684 if (isatty(STDERR_FILENO))
1685 msg_vstream_init(argv[0], VSTREAM_ERR);
1686 msg_syslog_init(argv[0], LOG_PID, LOG_FACILITY);

isatty()を外から騙せるか試行錯誤してますが、だめならそのまま
利用させていただきます!

898
名無しさん@お腹いっぱい。[sage]   投稿日:2015/07/18 23:59:07
expect コマンドがあれば expect -c 'コマンド 引数 ... ; expect eof'
で実行すればいいかも。
expect -c 'spawn pstmulti -i hogehoge -e destroy ; expect eof' | grep No

899
名無しさん@お腹いっぱい。[sage]   投稿日:2015/07/19 00:06:30
expect -c 'spawn コマンド 引数... ; expect eof' だた...
例文の方は正しいです。

900
880[]   投稿日:2015/07/19 11:47:38
おおお!ありがとうございます。できました。
まことに感謝です

901
名無しさん@お腹いっぱい。[sage]   投稿日:2015/07/19 15:45:46
var=$( command 1 | command 2 )
で、command 1とcommand 2のエラーレベルを取得数方法てありますか?
$?やPIPESTATUSではうまくいきませんでした。

902
名無しさん@お腹いっぱい。[sage]   投稿日:2015/07/19 16:44:41
var=$( command 1 | command 2; echo ${PIPESTATUS[@]} >&amp;2 )

903
名無しさん@お腹いっぱい。[sage]   投稿日:2015/07/19 19:00:45
error_evel=(${PIPESTATUS[@]})
といった具合に格納したいのですが、できそうですか?
思いつかないです

904
名無しさん@お腹いっぱい。[sage]   投稿日:2015/07/19 19:16:46
command 1 | command 2 > hoge
error_evel=(${PIPESTATUS[@]})
var=$(cat hoge); rm hoge

905
名無しさん@お腹いっぱい。[sage]   投稿日:2015/07/19 20:37:20
var=$(command 1 | command; echo ${PIPESTATUS[@]})
error_evel=$(echo "$var" | tail -1)
var=$(echo "$var" | sed '$d')

906
名無しさん@お腹いっぱい。[]   投稿日:2015/07/19 22:00:11
fun () {
 echo abc
}

# 1
res = "$(fun)"

# 2
res = `fun`


質問です。#1 と #2 は両方とも関数funの返り値を受け取って変数resへ代入していますが、
両方に特別な違いはあるのでしょうか?
見た目の好みの問題でどちらを使ってもよいものでしょうか?
コメント1件

907
名無しさん@お腹いっぱい。[sage]   投稿日:2015/07/19 23:16:03
健全でない言葉が含まれているため表示しません 内容を確認する

908
名無しさん@お腹いっぱい。[sage]   投稿日:2015/07/19 23:26:38
>906
$() は `` だから、"$(fun)" は "`fun`" で等価

違いは ’’はネストできないけど $() はネストできる

$ echo `date -r `pwd``
date: オプションには引数が必要です -- 'r'
Try 'date --help' for more information.
pwd

※これは echo $(date -r)pwd$()になってしまう

$ echo $(date -r $(pwd))
xxxx年 x月 x日 火曜日 xx:xx:xx JST

909
名無しさん@お腹いっぱい。[sage]   投稿日:2015/07/20 05:43:37
$ echo $(echo $(echo hage))
hage
$ echo `echo `echo hage``
echo hage

後者は`echo `と``の中身がコマンドとして解釈されてこれは空っぽで、残ったecho hageが単純な文字列としてechoされるのかw

910
名無しさん@お腹いっぱい。[sage]   投稿日:2015/07/22 16:37:21
いつも、変数取得と\rの消去をgrepと変数展開で
hoge=$(grep foo /bar/bar2)
hoge2=${hoge%?}
としているのですけど、?だとwinで作られたテキストか確認しなければ怖いのです。
\r、\r\n、^M、^M$では消せなかったです。
sedやtr使えばいいのですが、変数展開のほうが速いので
変数展開で安心して使いたいのです。
どうすればうまくできますか?

911
名無しさん@お腹いっぱい。[sage]   投稿日:2015/07/22 17:20:17
grepで複数行がマッチすることはないのかな
コメント1件

912
名無しさん@お腹いっぱい。[sage]   投稿日:2015/07/22 17:30:47
r=$(printf '\xd')

ってやっておいて

hoge2=${hoge%$r}
コメント2件

913
名無しさん@お腹いっぱい。[sage]   投稿日:2015/07/22 17:43:05
>911
もちろん、やるときにはgrep -m 1やってます

>912
パターンを作ってしまえばいいのか

914
名無しさん@お腹いっぱい。[sage]   投稿日:2015/07/31 19:13:47
すみません、自分用メモです
sedを使った改行を挟んだ置換
abcd
efg

aaaefgに
sed '/abcd/N;s/abcd\n/aaa/g' hoge.txt

abcd
efg

aaa
bbbに
LF=$(printf '\\\n_'); LF=${LF%_}
sed '/abcd/N;s/abcd\nefg/aaa'"$LF"'bbb/g' hoge.txt
コメント1件

915
名無しさん@お腹いっぱい。[sage]   投稿日:2015/07/31 19:14:46
あと、printfがわかっていないので質問させてください。
>912のr=$(printf '\xd')は、r=$(printf '\r')や$(echo -e '\r')ではまずいのでしょうか?
\xdはどういう意味なのですか?
もし、LFをprintfで作るときには$(printf '\n')、echoで作るときには$(echo -e '\n')で大丈夫なのでしょうか?
コメント1件

916
名無しさん@お腹いっぱい。[sage]   投稿日:2015/08/02 06:43:49
>915
echoでやってもいいよ。ただシェルによってechoの-eオプションが要ったり要らなかったりするから、
printfならどちらでも動くと。xdは16進の0xdの意味。

917
名無しさん@お腹いっぱい。[sage]   投稿日:2015/08/02 13:55:04
ありがとうございます
うちのechoのmanみたら-e使えませんでした。
でも、bashのechoを見たらつかえました。
実感できました。

LFならxaになるんですね。

918
名無しさん@お腹いっぱい。[sage]   投稿日:2015/08/05 12:50:25
grep "hogehoge" | head -1
コメント1件

919
名無しさん@お腹いっぱい。[sage]   投稿日:2015/08/05 18:34:40
>918 は誰に何を言いたいのだろうか?
grep -m 1 知らない人?
コメント2件

920
名無しさん@お腹いっぱい。[sage]   投稿日:2015/08/05 18:42:34
>914をマネして
a
b
c

d
e
f
にしようと
LF=$(printf '\\\n_'); LF=${LF%_}
sed '/abc/N;s/a\nb\nc/d'"$LF"'e'"$LF"'f/g' hoge.txt
をしたけど、ダメでした。
どうしてなんですか?どうすればいいのですか?
sedの改行から解放されると思ったのに。
コメント2件

921
名無しさん@お腹いっぱい。[sage]   投稿日:2015/08/05 18:54:13
>919
2つのプログラムの呼び出し、メモリ増といいことが見えない
しかも上にgrep -m 1 があるのに
誤爆か、シェルの覚えたてじゃないか
直後の>919はいい勉強になるのでは
コメント1件

922
名無しさん@お腹いっぱい。[sage]   投稿日:2015/08/05 19:18:30
>921
脳メモリの節約

923
名無しさん@お腹いっぱい。[sage]   投稿日:2015/08/06 03:47:34
むしろフィルタ指向のスクリプトを入れると最適化して、パイプの段数を減らしたスクリプトを吐いてくれるような
賢いオプティマイザ誰か作ってくれないかな?

924
名無しさん@お腹いっぱい。[sage]   投稿日:2015/08/06 09:43:47
細かいオプション憶える負担を人に負わせるより、パイプ1段増やす方が合理的。

925
名無しさん@お腹いっぱい。[sage]   投稿日:2015/08/06 13:25:47
head -1 は老害互換性オプション。
正しくは
head -n 1

新規作成スクリプトでは head -1 形式で記述してはいけない

926
名無しさん@お腹いっぱい。[sage]   投稿日:2015/08/06 13:48:36
ケースバイケース

927
名無しさん@お腹いっぱい。[sage]   投稿日:2015/08/06 14:02:13
動くからいいや

928
名無しさん@お腹いっぱい。[sage]   投稿日:2015/08/06 14:08:49
head -1 を使わせないためにせっかくmanからも記述削除してあるのに。。

929
名無しさん@お腹いっぱい。[sage]   投稿日:2015/08/06 14:57:15
manなんて読まんよ
実装を変えないと

930
名無しさん@お腹いっぱい。[sage]   投稿日:2015/08/06 15:33:08
実装は互換性のためにあえて変えてない。既存スクリプト用。

931
名無しさん@お腹いっぱい。[sage]   投稿日:2015/08/06 16:03:54
実装変わらなきゃ使う人なくならんね

932
名無しさん@お腹いっぱい。[sage]   投稿日:2015/08/06 16:32:44
歴史的経緯をなかったことにはできない。unixなんだから

933
名無しさん@お腹いっぱい。[sage]   投稿日:2015/08/06 17:20:14
誰か>920に答えてください
コメント1件

934
名無しさん@お腹いっぱい。[sage]   投稿日:2015/08/06 17:37:16
/abc/ が何を意味するのか調べなさい

935
名無しさん@お腹いっぱい。[]   投稿日:2015/08/06 17:41:57
>920
echo "a\nb\nc" | perl -0pe 's/a\nb\nc/d\ne\nf/m'

936
名無しさん@お腹いっぱい。[sage]   投稿日:2015/08/06 19:10:26
すみませんが詳しい方のみ回答をお願いします

937
名無しさん@お腹いっぱい。[sage]   投稿日:2015/08/06 19:59:57
>933
tr abc def < hoge.txt
コメント1件

938
名無しさん@お腹いっぱい。[]   投稿日:2015/08/06 20:41:41
>937
そりゃだめだ
連続していない1つの文字単位も置換される

939
名無しさん@お腹いっぱい。[sage]   投稿日:2015/08/06 21:54:19
GNU sed で。

$ tr '\n' '\0' < hoge.txt | sed -r 's/(^|\x00)a\x00b\x00c\x00/\1d\x00e\x00f\x00/g' | tr '\0' '\n'

でもこの場合、連続する "a\nb\nc\n" の置換ができない。

a\nb\nc\na\nb\nc\n => d\ne\nf\na\nb\nc\n

940
名無しさん@お腹いっぱい。[sage]   投稿日:2015/08/06 22:34:13
素直にsedで^a$だったら次の行を読み込み
それが^b$だったらまた次の行を読み込み
それが^c$だったら、ってやったらいいんでないの?
というか、エディタで読み込んで置換した方が早いよ

941
名無しさん@お腹いっぱい。[sage]   投稿日:2015/08/07 00:33:41
具体的にどうやればいい?

942
名無しさん@お腹いっぱい。[sage]   投稿日:2015/08/07 01:07:39
エディタによる

943
名無しさん@お腹いっぱい。[sage]   投稿日:2015/08/07 01:44:15
emacsなら

$ cat /tmp/elisp.el
(replace-regexp "a\nb\nc\n" "d\ne\nf\n")
(save-buffer)
(save-buffers-kill-terminal)

$ emacs hoge.txt -l /tmp/elisp.el

944
名無しさん@お腹いっぱい。[sage]   投稿日:2015/08/07 07:44:33
それだと

aa
b
c

も変換しちゃう

945
名無しさん@お腹いっぱい。[sage]   投稿日:2015/08/07 10:05:54
^を付けましょう

946
名無しさん@お腹いっぱい。[sage]   投稿日:2015/08/07 10:47:56
取り止めがないというかちょっと流動的な対応が必要な内容なんだけど
動画のファイル名に「第x話」とか「#x」、「第x章」と付いてるやつを
ゼロパディングして桁数をそろえたいんだ

「第1話」→「第01話」

何かお勧めのコマンドある?
まあ普通に考えるとsedなんだけど誤変換怖いから
今は手動で変更してるんだ
コメント5件

947
名無しさん@お腹いっぱい。[]   投稿日:2015/08/07 11:05:53
printfがあるやつなら2桁対応でいいんじゃないか?

echo "第2章" | perl -ne 'if (/第(\d)章/){printf "第%02d章", "$1"}'
第02章

echo "第12章" | perl -ne 'if (/第(\d+)章/){printf "第%02d章", "$1"}'
第12章

948
名無しさん@お腹いっぱい。[sage]   投稿日:2015/08/07 11:31:16
>946
第x話などのxの部分を切り出せるなら
case $num in
[1-9]) num=0$num ;;
0*) ;;
esac
echo $num

3桁なら
case $num in
[1-9]) num=00$num ;;
[1-9][0-9]) num=0$num ;;
0*) ;;
esac
echo $num
コメント1件

949
名無しさん@お腹いっぱい。[sage]   投稿日:2015/08/07 13:49:06
すみませんが詳しい方のみ回答をお願いします

950
名無しさん@お腹いっぱい。[sage]   投稿日:2015/08/07 13:52:45
>948
>第x話などのxの部分を切り出せるなら

核心の部分を飛ばしてどうするw

頭に0付けだけなら printf %03d $num とかで一発でできるよw (そこは問題じゃない)
コメント1件

951
名無しさん@お腹いっぱい。[sage]   投稿日:2015/08/07 14:36:35
>946の内容だけでは何に困難を感じているのかがわからない

1) 第x話や#x、第x章のxを切り出すよい方法がわからないのか、それとも
2) ゼロパディングする方法がわからないのか

もし1)なら、ゼロパディングする方法は関係ないし
もし2)なら、xを切り出す方法は関係ない

>核心の部分を飛ばしてどうするw
と言っている>950は、したがって>946さんの問題は1)だと解釈したことになる。
もし1)が「核心の問題」であるのなら
>946さんはなぜ「ゼロパディングして桁数を揃えたい」と書いたのだろう?

ということで、>946さんに何をしたいかもうちょっと具体的に言ってもらう必要があると思うよ。

952
名無しさん@お腹いっぱい。[sage]   投稿日:2015/08/07 15:09:50
いや、sedでゴニョゴニョすればできるのは知ってるけどそれだと誤動作が恐いから、
すでにそういう第x話とかの変換に対応した専用コマンドはないか?という質問だから。
答えは、「ない」
コメント1件

953
名無しさん@お腹いっぱい。[]   投稿日:2015/08/07 15:47:21
誤変換が恐いなら確認してから走らせればいいん者ね?
sed -n 's/ごにょ/ごにょ/p'

で変更部分だけ出力されるから、
大丈夫なら sed -i 入れて実行
コメント1件

954
名無しさん@お腹いっぱい。[sage]   投稿日:2015/08/07 15:50:28
>普通に考えるとsedなんだけど誤変換怖い

どんな場面で誤変換になるの?
コメント1件

955
名無しさん@お腹いっぱい。[sage]   投稿日:2015/08/07 17:03:38
シェルスクリプトだけで、ツイッターのBot動かしている人っていますか?

956
名無しさん@お腹いっぱい。[sage]   投稿日:2015/08/07 17:33:51
>952
そんな単一用途を求める時点でシェルスクリプトである必要ない
あなたにはファイル名変換君がお似合いです

957
名無しさん@お腹いっぱい。[sage]   投稿日:2015/08/07 19:52:08
動かしている人がいるかどうかを聞いてるんです

958
名無しさん@お腹いっぱい。[sage]   投稿日:2015/08/07 20:25:15
そんな事どこで聞いてるんだ?

959
名無しさん@お腹いっぱい。[sage]   投稿日:2015/08/07 21:15:22
>953
ふつうはそういうことしてからここで質問するよね

>954
どんな誤変換か自分も知りたい

960
名無しさん@お腹いっぱい。[sage]   投稿日:2015/08/08 12:09:25
第1章-序章.mp4
:
第5章-ホゲホゲ34歳の不倫part1.mp4
第6章-ホゲホゲ34歳の不倫part2.mp4
:

とか??

961
名無しさん@お腹いっぱい。[sage]   投稿日:2015/08/08 19:30:56
grepに、Pオプションなんてあったのか。sedにも欲しいスイッチだ
コメント1件

962
名無しさん@お腹いっぱい。[sage]   投稿日:2015/08/08 21:18:40
>961
先読み・後読みが使えるのは便利

963
名無しさん@お腹いっぱい。[sage]   投稿日:2015/08/09 07:15:54
#cat a.txt
aaaaa bbbbb ccccc

#printf "ddddd " >> a.txt
#cat a.txt
aaaaa bbbbb ccccc
ddddd
#printf "eeeee " >> a.txt
#printf "fffff " >> a.txt
#printf "ggggg " >> a.txt
#cat a.txt
aaaaa bbbbb ccccc
ddddd eeeee fffff ggggg


なんで1回目の追記のときだけ改行が入っちゃうの? 👀
Rock54: Caution(BBR-MD5:0be15ced7fbdb9fdb4d0ce1929c1b82f)

コメント1件

964
名無しさん@お腹いっぱい。[sage]   投稿日:2015/08/09 07:42:06
a.txtの最後に改行が入ってるから

965
名無しさん@お腹いっぱい。[sage]   投稿日:2015/08/09 07:46:01
つーかこんなのprintf "aaaaa " > a.txtからやれよ
何をやりたいんだよ
なんでa.txtがどういう状態か分かるんだよ

966
名無しさん@お腹いっぱい。[]   投稿日:2015/08/09 07:58:50
rootで実行するなよw
コメント1件

967
名無しさん@お腹いっぱい。[sage]   投稿日:2015/08/09 10:00:28
>966
なんで?

968
名無しさん@お腹いっぱい。[sage]   投稿日:2015/08/09 10:04:18
本来いじられたくないrootでしか編集できないファイルを簡単に上書くから

969
名無しさん@お腹いっぱい。[sage]   投稿日:2015/08/09 16:18:41
rootでしか編集できないファイルをいじるスクリプトを書いてるのかもしれない

970
名無しさん@お腹いっぱい。[sage]   投稿日:2015/08/09 18:08:05
>963 みたいな質問する奴にroot権限渡すな

971
名無しさん@お腹いっぱい。[sage]   投稿日:2015/08/10 12:25:15
昔は共同浴場みたいな感じで番台の管理者さんに断って
みんなで風呂に過いるイメージだったけど、今は家風呂
個人の管理ってイメージだから、ユーザ=rootの時代だよね。
そう言う意味ではUNIXそのものの考え方をパーソナルに考え直す
という手間暇を惜しんだところが負けだと思うわ。
コメント1件

972
名無しさん@お腹いっぱい。[sage]   投稿日:2015/08/10 20:06:59
UNIXベースのOSは過去最高に一般人に普及してるんだけどなにに負けたんだ?
コメント1件

973
名無しさん@お腹いっぱい。[sage]   投稿日:2015/08/11 01:39:01
わかってるくせにw

974
名無しさん@お腹いっぱい。[sage]   投稿日:2015/08/11 08:56:44
>972
androidをUNIXベースと考えるかどうかで勝敗は変わるんじゃないの?

975
名無しさん@お腹いっぱい。[sage]   投稿日:2015/08/11 11:03:46
iOSだってUNIXだよ

976
名無しさん@お腹いっぱい。[sage]   投稿日:2015/08/11 13:12:49
windowsだってunixかもしれないよ

977
名無しさん@お腹いっぱい。[sage]   投稿日:2015/08/11 13:15:39
ケンタッキーフライドチキンもUNIXだしな

978
名無しさん@お腹いっぱい。[sage]   投稿日:2015/08/11 13:41:34
POSIX互換なのはWindows2000までだっけ

979
名無しさん@お腹いっぱい。[sage]   投稿日:2015/08/11 22:28:27
美容室もUNIXだしな

980
名無しさん@お腹いっぱい。[sage]   投稿日:2015/08/12 01:15:37
>971
sudoは答えの一つだと思うがどうか?

981
名無しさん@お腹いっぱい。[sage]   投稿日:2015/08/12 07:34:06
単にインストールして設定して満足って人が多くなったからだろう
そりゃrootしか使わんわ

でもWindowsとかアドミン権限じゃないユーザで使ってる人結構多くて
いい意味でびっくりすることがある

982
名無しさん@お腹いっぱい。[sage]   投稿日:2015/08/12 10:29:07
個人ユースなんてサーバー用途だが多いだろうからログインするとき=rootじゃなきゃ出来ない作業をするときじゃないか?

983
名無しさん@お腹いっぱい。[sage]   投稿日:2015/08/12 11:18:27
いやちがう
管理者がいないから自分が管理者なだけ

984
名無しさん@お腹いっぱい。[sage]   投稿日:2015/08/12 11:23:24
>個人ユースなんてサーバー用途だが多い
んなこたーない

985
名無しさん@お腹いっぱい。[sage]   投稿日:2015/08/12 12:47:36
sudo を使うことすら面倒くさいと言うのか…

986
名無しさん@お腹いっぱい。[sage]   投稿日:2015/08/12 13:36:17
何の話だったっけ

987
名無しさん@お腹いっぱい。[sage]   投稿日:2015/08/12 14:25:02
cshからbashに移行した場合
.cshrcってターミナル起動した時に読み込まれなくなってしまいますか?
コメント1件

988
名無しさん@お腹いっぱい。[sage]   投稿日:2015/08/12 14:54:50
コマンド打つ

#になってないと実行できないコマンドだった

コマンド打ち直す


最初から#

コマンド打つ

確実に成功


後者のほうが効率がよい

989
名無しさん@お腹いっぱい。[]   投稿日:2015/08/12 15:03:47
以下の結果を出力するシェルを,bashスクリプトで書け.
(基本仕様)
・コマンドとして実行できる.(シェルコマンドである.)
・ユーザーが10000以上99999以下の5桁の数字を入力する.
・その数字を7で割って1余り,かつ13で割って2余った場合は Daikichiと表示する.
・それ以外で,13で割って2余った場合は Chuukichiと表示する.
・それ以外で,7で割って1余った場合は Shoukichiと表示する.
・それ以外の場合は Hazureと表示する.
・入力した文字が10000以上99999以下の数字以外の場合はエラーメッセージを表示する.
・できる人は,コマンドライン引数でDaikichiなどの文字を変更できるようにする.
(ポイント)
☆シェルコマンドにするには,スクリプトの最初に(#!で始まる)おまじないを書く.
☆標準入力から文字列を入力するには read を用いる.
☆コマンドラインの引数は,$@に格納されている.(その要素は $1 $2 ...)
☆四則演算には $(( )) コマンドが使用できる.(ただし,整数しか扱えない.)


誰かわかるひとお願いします
コメント1件

990
名無しさん@お腹いっぱい。[sage]   投稿日:2015/08/12 15:54:32
>989
来年はちゃんと授業聞こうな

991
名無しさん@お腹いっぱい。[sage]   投稿日:2015/08/12 17:01:02
私は講師です。ちょっと問題の反応を見たいのでここで聞いてみてるんですが、、
コメント1件

992
名無しさん@お腹いっぱい。[sage]   投稿日:2015/08/12 17:11:49
お盆休みはきちんと休んだほうがいい

993
名無しさん@お腹いっぱい。[]   投稿日:2015/08/12 17:24:59
> 誰かわかるひとお願いします
> 私は講師です。
講師CCO騙るにしてもこれは酷いw
遊びたかったら人狼逝け

994
名無しさん@お腹いっぱい。[sage]   投稿日:2015/08/12 18:07:03
なんで私が出した課題がここに貼られてるんですかね

995
名無しさん@お腹いっぱい。[]   投稿日:2015/08/12 20:18:03
bashでスクリプト書かせるなよ。
コメント2件

996
名無しさん@お腹いっぱい。[sage]   投稿日:2015/08/12 20:45:32
RANDOM使っちゃえよ
結果だけならどうせバレない

997
名無しさん@お腹いっぱい。[sage]   投稿日:2015/08/12 21:26:42
>995
なんで?

998
名無しさん@お腹いっぱい。[sage]   投稿日:2015/08/12 22:53:02
>991
ユーザーの入力が標準入力である、
というのが問題中に載ってないのは
よくないと思う。直しておいて。

999
名無しさん@お腹いっぱい。[sage]   投稿日:2015/08/13 00:25:40
>987
文法がそもそも違う

>995
#!/bin/sh
ruby <<< EOF
puts("Daikichi")
EOF
#とかでもよくね
更新情報
・スレッド一覧ページで過去ログのタイトル検索・一覧表示ができるようになりました(2016/1/20)
NGワード登録
登録する
スレッド内検索

UNIX板 タイトル検索

このスレッドが人気です(実況系)
実況 ◆ フジテレビ 82628 出家 (1000)フジ実況
実況 ◆ 日本テレビ 54261 カルト対893 (999)NTV実況
羽鳥慎一モーニングショー★2 (524)テレ朝実況
実況 ◆ テレビ朝日 46858 (902)テレ朝実況
実況 ◆ フジテレビ 82629 (152)フジ実況
連続テレビ小説 べっぴんさん★180 (939)NHK実況
白熱ライブ ビビット★1 (204)TBS実況
はやドキ!& あさチャン!月曜日★2 (379)TBS実況
このスレッドが人気です(ニュース系)
かばんから狆っ恥ずかしい瓠崑膺佑里もちゃ」 警察の所持品検査は「プライバシー侵害」と驚きの賠償命令…現場は震撼 (559)ニュー速+
【芸能】「出家します」清水富美加が電撃引退!『幸福の科学』活動専念へ★21 (1000)音楽・芸能ニュース
【政治】“田舎臭い少女風” 稲田防衛相のファッションに悪評[週刊新潮] (394)ニュー速+
【デッドライジング】 もしゾンビが大量発生したらどこに逃げるのが正解? (41)ニュー速
【芸能】「出家します」清水富美加が電撃引退!『幸福の科学』活動専念へ★22 (110)音楽・芸能ニュース
【社会】岐阜・金津園のソープランド摘発、岐阜県警 売春防止法違反の疑い (67)ニュー速+
【芸能】「出家します」清水富美加が電撃引退!『幸福の科学』活動専念へ★20 (1000)音楽・芸能ニュース
【静岡】イスラム教徒の保護者、「ハラール対応」ではない学校給食に苦慮 ムスリムへの理解と柔軟な対応求める★29 (1000)ニュー速+
UNIX板の人気スレ
Emacs Part 50 (179)
FreeBSDを語れ Part43 (425)
Emacs Part 48 (997)
NetHack 地下:61 (1017)
Vim Part25 (987)
初心者もOK! FreeBSD質問スレッド その121 (1003)
シェルスクリプト総合 その25 (894)
初心者もOK! FreeBSD質問スレッド その120 (1018)
Cygwin使っている人いますか? その21 (980)
FreeBSDを語れ Part37 (992)
シェルスクリプト総合 その23 (1000)
NetHack 地下:62 (359)
Oracle Solaris 総合スレッド 其の2 (298)
シェルスクリプト総合 その24 (999)
雑談スレだよもん☆もんだよもんもんだよもん!{36} (631)
Cygwin使っている人いますか? その22 (696)
Emacs Part 47 (995)
\chapter{\TeX} % 第九章+ (1001)
*BSDニュース@2ch その7 (642)
NetBSD その29 (479)
FreeBSDを語れ Part38 (983)
Navi2ch for Emacs (Part 21) (812)
連番のH画像/動画を一気にダウンロードする6 (984)
雑談スレだよもんもんもんだよ☆だよだよもん!{35} (991)
*BSDニュース@2ch その6 (982)
\chapter{\TeX} % 第十章 (561)
Vim Part26 (440)
Emacs Part 46 (984)
このサイトについて
このサイトは2ちゃんねるからデータを取得し、表示するサービスです。
画像のインライン表示機能について
画像のURLの後ろにある[画像をインライン表示]をクリックすると、URLの下に表示します。
表示される画像は横幅100pxに縮小されていて、クリックすると原寸で表示します。
このサイトの特徴
1)スレッド内検索ができます
2)レス(「>>1」など)のポップアップができます
3)不適切な言葉を含む投稿を表示しません
4)ページ内で画像を直接表示できます
5)2ch他スレッドへのリンクはタイトル・板名つきでリンクします
6)すっきりとしたデザインで表示します
7)最新スレや前スレをチェック・一覧表示します
8)NGワード機能の搭載でイヤな言葉が目に入りません
9)荒らしを自動チェックします
10)スレッド内・同一IDの書き込みだけ表示できます
11)レスの返事をレスされた発言の下に表示する「まとめビュー」が利用できます
12)シリーズ化したスレッドの一覧を表示します
13)最新のスレッドがある場合はお知らせします
削除について
こちらをご覧ください
機能要望について
現在機能要望受付中です。
問い合わせについて
こちらのページからどうぞ
Amazon


このサイトは2ch.scからデータを取得・表示しています。削除などについてはこちらをご覧ください。 アクセスモード:差分取得 - 新着書き込みなし(304)