トップページunix
988コメント297KB

シェルスクリプト総合 その24©5ch.net

■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。 転載ダメ©2ch.net2014/11/11(火) 00:54:03.43
シェルスクリプトの総合スレです。
□お約束
・特記なき場合は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
http://peace.2ch.net/test/read.cgi/unix/1404204950/
0138名無しさん@お腹いっぱい。2014/12/12(金) 12:34:18.14
ダブルクォートで囲っちゃえばいいんじゃない

sed "${START},${END}d" /dir/file
0139名無しさん@お腹いっぱい。2014/12/12(金) 12:39:48.69
START=1
END=2

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

printf "foo\nbar\nbaz\n" | sed " ${START} , ${END} d"
=> baz
0140名無しさん@お腹いっぱい。2014/12/12(金) 12:44:39.31
>>136
> sedは「,」が未知のコマンドです、と言ってき

これ、START 変数が undef か空っぽ("")なんじゃない?
set -x してからスクリプトを実行してみて確かめたほうがいいよ。
0141名無しさん@お腹いっぱい。2014/12/12(金) 12:45:54.06
エスパーすると $START とかに 全角スペース が入ってるw
0142名無しさん@お腹いっぱい。2014/12/12(金) 12:55:10.57
なるほどw
0143名無しさん@お腹いっぱい。2014/12/12(金) 13:05:14.93
$ printf "foo\nbar\nbaz\n" | sed ",2d"
sed: -e 表現 #1, 文字数 1: 未知のコマンドです: 「,」
0144名無しさん@お腹いっぱい。2014/12/12(金) 14:02:50.73
>>136 です。

やさしきみなさん、コメントありがとうございます。
これからいじくってみて、あとで結果報告いたします。
0145名無しさん@お腹いっぱい。2014/12/12(金) 14:35:13.48
>>136 です。

デバグ用の

echo $START
echo $END

の直後に、

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

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

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

>>139 さんの書かれたprintf文、参考になりました。まずこ
れを試してみるべきでしたね。
0146名無しさん@お腹いっぱい。 転載ダメ©2ch.net2014/12/12(金) 14:52:02.24
たぶん後ろに改行が入ってたんじゃないかな
^Mのやつ
0147名無しさん@お腹いっぱい。2014/12/12(金) 15:06:40.30
^Mですか。結構、ネット上には^Mを消すという記事がありますね。
これのことだったのか、がてんいきました。
0148名無しさん@お腹いっぱい。2014/12/12(金) 15:38:25.84
^M だと、
START=`echo $START`
やっても^Mは取れないから、違うと思うぞ
0149名無しさん@お腹いっぱい。2014/12/12(金) 18:17:01.24
シェルスクリプトはXMLのDOM操作のようなことはできないんですか?
あいだに要素を追加したりとか
0150名無しさん@お腹いっぱい。2014/12/12(金) 19:08:12.46
要素って具体的に何?
0151名無しさん@お腹いっぱい。2014/12/12(金) 19:58:42.72
>>149
やればできると思うが、結構面倒だしな

>>150
テキスト要素とかタグ要素とか
0152名無しさん@お腹いっぱい。2014/12/12(金) 20:44:30.25
>>149
xslt使えよ
0153名無しさん@お腹いっぱい。2014/12/13(土) 00:48:34.76
シェルスクリプトで、XMLのDOM操作をしたいってことなのか
「のようなこと」ってあるから別の何かかと思った
使ったことは無いんだけど、XMLgawkが便利そう
0154名無しさん@お腹いっぱい。2014/12/13(土) 03:47:01.58
XML Starletとか
0155名無しさん@お腹いっぱい。2014/12/15(月) 19:52:22.36
dashってのがあったんだ。
知らなかった。。。ash系なのか、ダッシュ島系なのか
0156名無しさん@お腹いっぱい。2014/12/15(月) 20:11:02.18
農家専用プログラミング言語
0157グールドの著作を読むなら原書で2014/12/16(火) 15:34:56.67
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

当時の基準で採点してみてください。当時はこういうユーザフレンドリなプログラム見かけなかったんだけど。環境が違えばあったのかな?
0158名無しさん@お腹いっぱい。2014/12/16(火) 17:02:19.69
>>157
1993年ってもうSVR4とかある時代だからそんなに古くないし、スクリプト内容も見所がない。
何を採点して欲しいやら。

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

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

#!/bin/sh

set `finger -m $USER`
echo ' Hi '"$4"'!'
0159グールドの著作を読むなら原書で2014/12/16(火) 17:23:03.61
>>158
echoコマンドはこういう遣り方じゃないと勝手に改行が入って苦労しました。
!も特殊文字扱いだったということでしょう。
それはさておきいちいちwhoとか名前付けてsetしなくてよいということですね。
こういうプログラムって当時からやってました?
sfcって遅れたキャンパスだったので、他大学の工学部などでは常識でも
あのキャンパスでは非常識ということも多々あるかと思います。
とにかくHi [first name]っていうプログラムを動かしてたのは学内で自分だけでした。
プログラムの全体はLaTeXをエクステンション除いたファイル名だけ打ち込めば
任意のプリンタから自動印刷できるという内容なんですがね。
0160名無しさん@お腹いっぱい。2014/12/16(火) 17:28:04.57
昔話がしたいの?
0161グールドの著作を読むなら原書で2014/12/16(火) 17:38:54.20
他キャンパスでは当時どうだったか知りたいだけ。これってアドミン権限除いた
基本的な構造はAmazon.comなどで金になってる商売だから。
0162名無しさん@お腹いっぱい。2014/12/16(火) 17:51:39.82
1993年ならUNIXとしては遅い方。
どこにでも普通に転がってるスクリプトだし、なんの変哲もないヘボスクリプトの何を評価しろとw
0163グールドの著作を読むなら原書で2014/12/16(火) 17:54:06.78
このスクリプトの特許持っている人ってどの国の何ていう人で取得年は何年?
0164名無しさん@お腹いっぱい。2014/12/16(火) 17:54:28.41
なんで特許持ってる前提になってんの?
0165グールドの著作を読むなら原書で2014/12/16(火) 17:58:23.52
金になるアイデアには特許が付き物でしょう。Amazon.comだって誰かに金払ってるでしょ。
0166名無しさん@お腹いっぱい。2014/12/16(火) 18:23:54.80
もしかして、root権限がなくても/etc/passwdのフルネームフィルドが読める手法がすごい、って言ってるの?
/etc/passwdは一般ユーザーでももともと読めるし、(たとえshadowでもパスワード部分以外は)
NIS使ってるならypcat passwdは一般ユーザーでもできるし。
何の新規性もない。
0167グールドの著作を読むなら原書で2014/12/16(火) 18:38:28.60
>>166
そうではなくて、大したことの無いアイデアが金になることがある、ということを強調している。
Amazon.com等々が誰かに金を払っているのは事実の筈だし。無論アドミン権限の中のプログラム
であってもデータから抜き出す作業は同じ。で、Amazonとかできた当初はHi某とか言ってこなかった
筈なので、そこら辺の経緯を知りたいわけ。日本語では英語名で抜き出すのは日本語名で抜き出す
よりは厄介な筈。他に方法いくらでもあるから。
0168名無しさん@お腹いっぱい。2014/12/16(火) 18:43:25.43
スレ違い。
0169名無しさん@お腹いっぱい。2014/12/16(火) 20:12:06.60
「俺が始めてだ、すげーだろー」は、その時点で主張しなけりゃ何の意味もない

ちなみにBBSにおいてユーザーの識別子として一方向ハッシュを表示する手法を、提唱したのは俺だ。
0170名無しさん@お腹いっぱい。2014/12/16(火) 21:46:14.47
>>167
そこまで知りたいなら調べて報告してくれ
おしえてクンじゃなければね
0171名無しさん@お腹いっぱい。2014/12/17(水) 00:10:11.34
>>167
> Amazon.com等々が誰かに金を払っているのは事実の筈だし。

まず、このソースを出してくれ
0172名無しさん@お腹いっぱい。2014/12/19(金) 14:14:12.27
mksh; MirBSD Korn Shell
ってのがあったんだ。
知らなかった。。。ash系なのか、ダッシュ島系なのか
0173名無しさん@お腹いっぱい。2014/12/23(火) 07:08:11.72
おっさんそんな調子で年越せんのか
しっかりしろ
0174名無しさん@お腹いっぱい。2014/12/25(木) 17:52:08.23
さあ、クリスマスだよ。
学生さんは冬休みに、買ってもらった
Mac, iPhone, android でシェルスクリプトを書いて遊ぼう!
0175名無しさん@お腹いっぱい。2014/12/25(木) 18:54:27.87
買ってもらった?
学生なら自分で買うわ。

生徒や児童なら買ってもらうかも知れんが。
01762014/12/25(木) 19:32:27.25
/:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::ヽ
    /:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::://ヽ:::::::::::::::|
    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
0177名無しさん@お腹いっぱい。2014/12/26(金) 09:25:20.89
スレ違いかもだけど。。。
cronでスクリプト最速で回すとすると
* * * * * /home/user/hoge.sh
だけど、これ以上の頻度というか速度で実行できないのかな。
無限ループ覚悟で、hoge.shの最後に自分自身をコールするとか。
0178名無しさん@お腹いっぱい。2014/12/26(金) 09:36:37.85
自分自身でまわすならcronからは1回でいいじゃん
0179名無しさん@お腹いっぱい。2014/12/26(金) 09:36:40.46
>>177
何かの待ち受けイベントチェックか?

普通にsleep 1とかしながらループすればいいじゃん。cron必要なし。
自分自身をコールするするのは無駄だからwhile :; do hoge; sleep 1; done で無限ループな。
0180名無しさん@お腹いっぱい。2014/12/26(金) 09:55:10.70
*じゃなく*だ。
0181名無しさん@お腹いっぱい。2014/12/26(金) 10:01:04.07
>>179
そうです、自宅鯖で、smtpからweb、ssh、イベント監視まで
全部やらせてるマシン。あんまとっぴなことすると、落ちそう
なので。sleep入れれば、変な挙動はなくなりそうですね。
感謝!
0182名無しさん@お腹いっぱい。2014/12/26(金) 12:23:03.31
>>179さんの助言をそのまんまパクリ、

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

しかし、良スレですね、ここは。いつも助けていただき感謝です。
0183名無しさん@お腹いっぱい。2014/12/26(金) 12:27:53.31
ここの住人のかたがたは皆さん知ってるだろうけど
今浦島な私には、pgrep、pkillというコマンドが使える
のが素晴らしいと思いました。(最近知った)
なんか昔は、kill -9 `pidof nantoka`とかやってたのが
なつかしいというか。
0184名無しさん@お腹いっぱい。2014/12/26(金) 13:13:19.56
話続けるなら名前欄にレス番入れてよ。
0185名無しさん@お腹いっぱい。2014/12/27(土) 13:16:10.86
>>179
conky使ったりatに登録したりしてまわさなくても、
単純にそれで良かったんだなあ。
0186名無しさん@お腹いっぱい。2014/12/31(水) 06:28:21.74
さあ、大晦日だよ。
学生さんは冬休みに、買ってもらった
Mac, iPhone, android でシェルスクリプトを書いて遊ぼう!
0187名無しさん@お腹いっぱい。2014/12/31(水) 13:02:42.92
iPhoneでどうやって書けるの?
0188名無しさん@お腹いっぱい。2014/12/31(水) 13:58:30.05
http://ideone.com
0189名無しさん@お腹いっぱい。2014/12/31(水) 19:47:38.53
書くだけでなく、走らせて結果を見れるやり方
ただ調べた結果だけなので自己責任で

* インターネットブラウザーの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
0190名無しさん@お腹いっぱい。2015/01/01(木) 17:27:22.86
ggl 検索文字列
でw3mを使って検索文字列でググる要にしているのを拡張したい

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

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

オプションとかのガイドラインてある?
例えば -l はリスト(at -l など)で使うとか、多くのコマンドは
引数がない時は -h オプションと同じように簡単な説明がでるとかのメジャーなガイドライン
0191名無しさん@お腹いっぱい。2015/01/01(木) 18:19:12.95
GNUにはあった気がする
0192名無しさん@お腹いっぱい。2015/01/01(木) 18:26:54.79
引数ないときは「クリップボードから」なんて慣習は存在しない。
0193名無しさん@お腹いっぱい。2015/01/01(木) 18:29:20.31
興味があったのでちょっと検索してみた。
ガイドラインというのはわからないが、こんな感じで使われてるね〜みたいのなら、

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.
0194名無しさん@お腹いっぱい。2015/01/01(木) 20:15:18.38
>>191-193
サンキュー

URL先の情報にぴったりのオプション見つからないから
-h を少し書いて後々忘れた時に備えて、
デフォルトでクリップボードで検索、
引数あるときはそれで検索にする
0195名無しさん@お腹いっぱい。2015/01/01(木) 22:28:20.83
両方用意すればいいんじゃない?
自分の名前がgglかgglcかで動作が変わるのも面白そう。
0196名無しさん@お腹いっぱい。2015/01/01(木) 22:31:09.64
名前同じで動作変わるとmanの括弧書きの数字が増えてややこしいみたいな?
0197名無しさん@お腹いっぱい。2015/01/03(土) 21:18:53.70
そういやgetopt(3)ってPOSIXで規定されてるんだね。いまどきの
*BSD, Linuxならlibcで持ってるものなんだな。

とあるソフトがGNUのgetopt.cを同梱しているので消してやりたいと思って
いたんだけど、configureでgetoptの存在チェックしてlibcの方を優先して
使わせるようにするのがいいのかな。
0198名無しさん@お腹いっぱい。2015/01/08(木) 11:56:42.54
「とあるソフト」がGPLなら、一部を削除するのはライセンス違反。
0199名無しさん@お腹いっぱい。2015/01/08(木) 12:01:18.92
>>198
なんで?
0200名無しさん@お腹いっぱい。2015/01/08(木) 12:15:36.60
GPL V3
4. Conveying Verbatim Copies.
5. Conveying Modified Source Versions.
0201名無しさん@お腹いっぱい。2015/01/08(木) 13:17:19.27
>>200
詳しく
0202名無しさん@お腹いっぱい。2015/01/08(木) 18:53:35.81
質問です
22, 32, 33, 45,
12, 47, 78, 44, 32,
...
数字がカンマで区切って700個書いてあるファイルがあります。
一行に数字が何個あるか規則性はありません。
このファイルを読み込んで数字を100個ずつ出力して7枚のファイルを
作りたいと思っています。シェルスクリプトでうまくできますでしょうか。
出力されたファイルには数字が一列で入っているほうがいいです。
お願いします。
0203名無しさん@お腹いっぱい。2015/01/08(木) 19:41:16.46
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 というファイルができるはず
0204名無しさん@お腹いっぱい。2015/01/08(木) 20:20:07.70
gawk じゃなくてふつーの awk で。

awk -v RS=, '{print $0+0 > int(NR/100)+1 ".txt" }'
0205名無しさん@お腹いっぱい。2015/01/08(木) 20:36:37.66
int((NR-1)/100)+1 じゃないとダメだった。
02062032015/01/08(木) 20:51:41.18
あ、カンマはいらないのね
02072032015/01/08(木) 20:56:03.24
なおかつ1列を1行と読み間違えていた(´・ω・`)ショボーン
0208名無しさん@お腹いっぱい。2015/01/08(木) 21:09:50.76
ファイル分割が有るし、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
}
0209名無しさん@お腹いっぱい。2015/01/08(木) 21:43:46.83
awkもsedも出ちまったか

tr -d '\r\n' < file
0210名無しさん@お腹いっぱい。2015/01/08(木) 21:52:48.42
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
02112092015/01/08(木) 21:57:31.95
ミス

tr -d '\r\n' < file | tr ',' '\n' | split -l 100
0212名無しさん@お腹いっぱい。2015/01/08(木) 21:58:20.67
考えてる途中で送っちゃった。やり直し

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
02132092015/01/08(木) 22:01:45.08
>>212
お前は俺か
0214名無しさん@お腹いっぱい。2015/01/08(木) 23:07:34.58
/ *, */を改行に変換してhead
0215名無しさん@お腹いっぱい。2015/01/09(金) 00:45:24.74
#!/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
0216名無しさん@お腹いっぱい。2015/01/09(金) 01:53:20.06
GNU grep and GNU parallel

$ grep -Po '[0-9]+' data.txt | parallel --pipe -L 100 -n 1 -k 'cat - > {#}.txt'
0217名無しさん@お腹いっぱい。2015/01/09(金) 01:59:25.49
211と216を足して

$ grep -o '[0-9]\+' data.txt | split -l 100
02182022015/01/11(日) 18:59:23.53
>>203-217
ありがとうございます。本当に助かりました。
勉強不足を痛感。向上心を刺激されました。
0219名無しさん@お腹いっぱい。2015/01/14(水) 13:42:56.50
$SEARCH に入れても awkが動いてくれません
{}が引っかかってしまったのだろうか? どうすればよいのだろうか?

while true
do read SEARCH
awk 'BEGIN{RF="---"}/${SEARCH}/' $save_to
done
0220名無しさん@お腹いっぱい。2015/01/14(水) 13:55:03.85
シングルクォートで囲まれてるから置換されないのよ
0221名無しさん@お腹いっぱい。2015/01/14(水) 14:41:45.54
>>220
多少書き換えてみました
しかし、まだ動きません

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

~/sbin/h_Searher.awk
BEGIN{RF="---"}/$SEARCH/
0222名無しさん@お腹いっぱい。2015/01/14(水) 17:08:45.99
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";
  }
}
0223名無しさん@お腹いっぱい。2015/01/15(木) 10:05:06.27
>>219
awk 'BEGIN{RF="---"}/'${SEARCH}'/' $save_to
0224名無しさん@お腹いっぱい。2015/01/15(木) 12:37:55.02
>>223
thanks!
0225名無しさん@お腹いっぱい。2015/01/15(木) 13:19:56.10
そして、$SEARCHにインジェクションされましたとさ。
0226名無しさん@お腹いっぱい。2015/01/15(木) 18:30:18.23
GNU awk ならこんなのも

awk -v SEARCH="$SEARCH" 'BEGIN{RF="---"}/SEARCH/' $save_to
0227名無しさん@お腹いっぱい。2015/01/20(火) 01:40:59.45
こんな雑誌があることを初めて知った。
なんと月刊で20号以上出ているということにも驚いた。

シェルスクリプトマガジン vol.21
http://www.amazon.co.jp/dp/4904807154/
https://www.usp-lab.com/pub.magazine.html
0228名無しさん@お腹いっぱい。2015/01/20(火) 05:22:18.17
その雑誌の半分はシェルスクリプト関係ない内容だから相当ネタがないんだろなって思った
0229名無しさん@お腹いっぱい。2015/01/21(水) 01:45:14.76
ツールドフランスの実況が森の景色の解説になってるようなもんか
0230名無しさん@お腹いっぱい。2015/01/22(木) 16:29:19.37
コマンドラインから手入力するとちゃんと動くスクリプトが、cronからだと動かない。
数日悩んだ結果。。。原因はLANGだった
0231名無しさん@お腹いっぱい。2015/01/22(木) 16:32:53.58
ルンゲの罠
0232名無しさん@お腹いっぱい。2015/01/22(木) 16:48:29.41
>>230
まれによくある。

スクリプトの先頭付近でLANGを設定しちゃうことも多いんだけど、Unix的でクールな
ポータビリティのある手法を紹介してくれる偉い人が出てくるのを正座して待ちたい。
0233名無しさん@お腹いっぱい。2015/01/22(木) 17:14:56.12
LANG=C
0234名無しさん@お腹いっぱい。2015/01/23(金) 06:42:51.72
偉い人が
 共通したものは crontab 先頭で、タスク毎のは env NAME=VALUE COMMAND
と答えるか、もうまるっきり答えないと予想した
0235名無しさん@お腹いっぱい。2015/01/23(金) 10:00:16.40
共通したものは crontab 先頭で、タスク毎のは env NAME=VALUE COMMAND
0236名無しさん@お腹いっぱい。2015/01/23(金) 16:52:05.70
偉い人のコピペ北ー!
自演っぽくて、コメントしづらい輪
0237名無しさん@お腹いっぱい。2015/01/23(金) 17:30:03.53
この話はここで終わりって暗に言ってるんだろう
■ このスレッドは過去ログ倉庫に格納されています