トップページ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/
0114名無しさん@お腹いっぱい。2014/11/29(土) 01:50:33.86
$ echo $'1\r2'
0115名無しさん@お腹いっぱい。2014/11/29(土) 06:46:31.93
>>109
おそらくいつものコピペ荒らし
http://peace.2ch.net/test/read.cgi/unix/1413122189/276
0116名無しさん@お腹いっぱい。2014/11/29(土) 09:29:20.23
>>115
その後誘導されてこっちに移動してきた
0117名無しさん@お腹いっぱい。2014/11/29(土) 10:00:47.02
誘導も移動も自作自演
0118名無しさん@お腹いっぱい。2014/11/29(土) 10:56:38.77
たぶんVimスレで誘導した奴==>>102==>>115
0119名無しさん@お腹いっぱい。2014/11/29(土) 11:00:44.61
>>112-114
これいやらしくて自分も引っかかったんだけど
>>112はshで目的の動作をしてbashだとだめなんだよな
自分はシェルがbashでスクリプトはshなんだけど
実行結果が違うから引っかかって結構悩んだ
0120名無しさん@お腹いっぱい。2014/11/29(土) 12:05:12.75
ひどい言いがかりだ
0121名無しさん@お腹いっぱい。2014/11/29(土) 12:07:01.30
まだbashなんか使ってたのかよw
0122名無しさん@お腹いっぱい。2014/11/29(土) 12:12:50.64
鉄腕bash
0123名無しさん@お腹いっぱい。2014/11/29(土) 12:27:45.78
大腕硬爆衝
0124名無しさん@お腹いっぱい。2014/11/29(土) 13:00:19.16
>>119
printfを使うか>>114のように展開するのがいいみたいね
https://fumiyas.github.io/2013/12/08/echo.sh-advent-calendar.html
http://mattintosh.hatenablog.com/entry/2013/12/11/201503
0125名無しさん@お腹いっぱい。2014/12/04(木) 14:50:44.76
Xpath形式のデータを整形式にするスクリプト知りませんか?
0126名無しさん@お腹いっぱい。2014/12/05(金) 07:55:18.64
コマンドだけど xmllint

http://stackoverflow.com/questions/15461737/how-to-execute-xpath-one-liners-from-shell
http://stackoverflow.com/questions/4680143/how-to-parse-xml-using-shellscript
0127名無しさん@お腹いっぱい。2014/12/07(日) 12:25:15.01
1点ご質問させてください。
現在下記のようなシェルスクリプトを書いています。

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

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

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

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

そのためもしより良い解決方法がありましたらご教授いただけませんか。
0128名無しさん@お腹いっぱい。2014/12/07(日) 12:45:10.31
function にしてみるとか

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

err_and_exit 'hoge' 2>&1 | tee test.log
0129名無しさん@お腹いっぱい。2014/12/07(日) 13:35:25.85
>>127
全部まとめて tee して、コマンドは && でつなげばエラーがあれば途中で打ち切ってくれるよ。

( hoge && hoge2 && hoge3 && hoge ) 2>&1 | tee test.log
01301292014/12/07(日) 13:37:42.00
amp化けやだー 全角&で書き直すわ

( hoge && hoge2 && hoge3 && hoge4 ) 2>&1 | tee test.log
0131名無しさん@お腹いっぱい。2014/12/07(日) 17:01:01.11
set -eじゃダメなのか?
0132名無しさん@お腹いっぱい。2014/12/07(日) 17:03:41.55
>>127
#!/bin/bash
exec > >(tee test.log) 2>&1
trap 'echo "ERROR!!" ; exit 1' ERR
hoge
hoge2
hoge3
hoge4
0133名無しさん@お腹いっぱい。2014/12/07(日) 17:16:16.20
>>131

set -e
false | true

echo 'set -e してもパイプ下流が真だと終了しないよw'
0134名無しさん@お腹いっぱい。2014/12/07(日) 21:22:56.83
>>128>>129>>132
お礼が遅くなりましたが、ご回答ありがとうございました。
今回用途としてはコマンドを実行してエラーが発生した段階で
スクリプトを終了させたかったため、下記のような記述に変更しました。

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

hoge5
hoge6

>>127と比べると「tee test.log」の重複した記述もなくなったので
少しすっきりしたように感じます。
良い解決方法を教えていただき、ありがとうございました。
0135名無しさん@お腹いっぱい。2014/12/11(木) 09:38:51.84
>>86
なんだか勇気づけられた
ありがとう
0136名無しさん@お腹いっぱい。2014/12/12(金) 12:07:03.36
もう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/'とか)ではそ
ういう例もあるようですが。よろしくお願いします。
0137名無しさん@お腹いっぱい。2014/12/12(金) 12:30:40.72
>>136

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

で行けるよ。

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

START=`echo $START`
END=`echo $ECHO`
で、代入し直す。
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
■ このスレッドは過去ログ倉庫に格納されています