シェルスクリプト総合 その25©5ch.net
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001名無しさん@お腹いっぱい。 転載ダメ©2ch.net
2015/08/14(金) 23:42:01.51□お約束
・特記なき場合は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.illumos.org/source/xref/illumos-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に逃げずにシェルスクリプトで処理するのが頭のいいやり方。
前スレ
シェルスクリプト総合 その24
http://peace.2ch.net/test/read.cgi/unix/1415634843/
0880名無しさん@お腹いっぱい。
2017/02/10(金) 10:59:36.910881名無しさん@お腹いっぱい。
2017/02/10(金) 11:04:25.90早い話、1000x1000の平面のすべての整数座標に点があったらどうソートしたいわけ?
2次元だからややこしいわけでなく1次元でも同じこと
0883名無しさん@お腹いっぱい。
2017/02/10(金) 11:15:25.85ごめん間違えた>>859だ
>>881
いや曖昧じゃない
2次元と言うのもちょっと複雑にしてるだけだろう
プラマイ100以内は同じと言う明確な基準がある
ただたぶんこのソートの結果は>>879に記したように
初期のデータの並びによって変わる部分があると思うね
だからこのソートは>>859の思いつきソートだってことだ
0884名無しさん@お腹いっぱい。
2017/02/10(金) 11:38:39.440885名無しさん@お腹いっぱい。
2017/02/10(金) 14:05:33.33(0, 100)
(99, 300)
(198, 200)
どう並べりゃ良いのよ?
0886名無しさん@お腹いっぱい。
2017/02/10(金) 14:12:56.80(0, 202)
(99, 101)
(198, 0)
こうか
0887873
2017/02/10(金) 14:39:27.08(0,998)
...
(0,1)
(0,0)
どう並べる?
0888名無しさん@お腹いっぱい。
2017/02/10(金) 15:26:37.64bar=`ls foo_*.txt|tail -1|cut -d\. -f1`
で$barに高確率で何も入らなかったり(foo_*.txtはあるのに)
bar=`echo $foo|perl -pE 's/^.*"hoge":"([^"]+)".*$/HOGE_\1/'`
echo $bar > /dev/null
echo "result:"$bar
の2行目がないと何故か3行目で$barが空のように表示されたり
というような現象が起きるんだけど、これってよくあること?
cygwin64にしてから起きているような気もする
0889名無しさん@お腹いっぱい。
2017/02/10(金) 15:56:58.38.
東京都三鷹市 元ニコ生主の莉里子です (整形後) http://i.imgur.com/SLcz3dS.jpg (整形前) http://i.imgur.com/zPvxpx5.png
不倫・浮気・密会・不道徳な行為は著名な小説家でしている人がいるので真似しちゃう池沼です http://i.imgur.com/vZeIuO3.png
■2015年2月 釣りニコ生主コジコジと沖縄旅行でオフパコ
2015年2月2日-3日...釣り生主コジコジと沖縄旅行でセックス/やり捨てされ逆ギレ
2015年2月4日.........莉里子の父親から電話があって脅されたとコジコジに放送で暴露される
2015年2月6日.........リスカ画像UP
2015年2月9日.........ツイ全消し/コミュ爆破逃亡
http://imgur.com/a/58WQC
■2016年6月 バンドマン兼ニコ生ツイキャス配信者と密会 その3日後に穴るセックス〜継続中
http://imgur.com/a/Lx8o2
●早川莉里子●土井莉里子●土井寧々●土井剛●早川剛●星崎●りりこ●りりこし●にゃんぱす
●ね子●にゃこ●みんち●めう●ねね●猫又●剛
※名古屋ゲイ風俗ホストとも体の関係※
0890名無しさん@お腹いっぱい。
2017/02/10(金) 15:57:21.03.
莉里子(本人公表)1994年3月7日 or 1996年4月25日 http://imgur.com/a/oJZpv
生主時代(にゃんぱす、りりこし、莉里子)
剛 http://i.imgur.com/dQxxGuV.png http://imgur.com/a/gPaof
東京都三鷹市 シティハイツ吉祥寺通り
http://i.imgur.com/UmTmbcu.jpg
http://i.imgur.com/cODTuzm.png
http://i.imgur.com/KdyuUod.png
http://imgur.com/a/eeixK (見せたがり乱交好きのメンヘラ) http://i.imgur.com/9V5mmTh.png
http://i.imgur.com/lobby7w.png
http://i.imgur.com/AdewV6O.jpg
http://i.imgur.com/YQaNYBd.png
http://i.imgur.com/pdsCXHG.jpg
莉里子 緊縛ハメ撮り師 『相馬ドリルrenji』 とラブホに2人で入って フルヌード緊縛ハメ撮り
https://pbs.twimg.com/media/CpFjMz0UEAAurD-.jpg http://i.imgur.com/xaAhkiD.png
https://twitter.com/somadrill/status/761498960028499968
http://imgur.com/a/3dnz5
http://i.imgur.com/SAAZ0fQ.png
0891名無しさん@お腹いっぱい。
2017/02/10(金) 15:57:31.97.
.
>悪質パクツイ垢(自称ハッカー)のコピーライティング特定されててワロた
@copy__writing の中の人は東京都三鷹市の莉里子
https://twitter.com/copy__writing
http://i.imgur.com/LyXsDj9.png
http://i.imgur.com/nqT3xBN.png
http://i.imgur.com/2FlhfLE.jpg
https://www.mercari.com/jp/u/446591929/
0892名無しさん@お腹いっぱい。
2017/02/10(金) 15:58:37.98@riricoco0
@bibliophilia333
@muzimuzi333
@nekomatagensou
@hanasoraumimori
@mirainosekai3
@zibanyan666
@parlorchild
@liliririko
@EriotN
@mike_peko
@riricoco0
@ririko_neko
@nyanpas ※1
@telegraphyneko
@riricatputi (新アカ) http://imgur.com/a/X1vQA
0893名無しさん@お腹いっぱい。
2017/02/10(金) 22:49:49.54再現性はあるの?
手で実行してるのか知らないけど
lsの結果をファイルにリダイレクトしといて(ログ残しておいて)
地道に調べるしかないと思う
0894名無しさん@お腹いっぱい。
2017/02/14(火) 09:44:10.27while read line
do
なんちゃら
done < CSV
みたいに一行ずつ読み込んでなんちゃらすると、特定の漢字をreadで取った時に文字化けするんだが
これの回避策って兄貴何かないかな
とりあえずIFSを改行のみにしてfor line in `cat CSV`にして凌いだが、IFSいじるのが気持ち悪くて仕方がない
0895名無しさん@お腹いっぱい。
2017/02/14(火) 10:11:22.080896名無しさん@お腹いっぱい。
2017/02/14(火) 10:13:38.180897名無しさん@お腹いっぱい。
2017/02/14(火) 10:35:53.640x5C を含む漢字でしょ、「表」とか
だったら read -r line で
0898名無しさん@お腹いっぱい。
2017/02/14(火) 10:44:50.39KOREDAAAAA!!!
ありがとう兄貴
ちなみに構造って感じでつまづいてた
SJIS扱うのは古いプロジェクトならよくあることよ
0899名無しさん@お腹いっぱい。
2017/02/14(火) 10:54:10.92UTF8とかだと回避出来るんかなこれは
0900名無しさん@お腹いっぱい。
2017/02/14(火) 11:54:23.78これが世代というものなんですね……
0901894
2017/02/14(火) 13:40:31.07にしても意外なほどググっても出ないな、それほどマイナーなのかこの症状
もしくは当たり前すぎるのか
0902名無しさん@お腹いっぱい。
2017/02/14(火) 15:20:01.03sjis ダメ文字でググればごろごろと
0904名無しさん@お腹いっぱい。
2017/02/14(火) 15:40:03.34もう少しやったな
0905894
2017/02/14(火) 16:05:30.25特定の漢字が文字化けってあたりの記事から推察して、SJISがなんかマズイってとこにはたどり着いたかもしれんが、多分それでもread -rには気づかなかったと思うわ
iconv -t utf8してたと思う
0906名無しさん@お腹いっぱい。
2017/02/14(火) 17:11:17.24iconv を利用するのはアリだと思うよ。
業務系のシェルスクリプトでも「SJIS データを一時的に UTF-8 にコンバートして何らかの処理をした後に SJIS に戻す」という手法で実装することがある。
0908名無しさん@お腹いっぱい。
2017/02/14(火) 20:50:41.080909名無しさん@お腹いっぱい。
2017/02/15(水) 01:22:16.710910名無しさん@お腹いっぱい。
2017/02/15(水) 01:34:33.21iconvならきっとなんとかしてくれる
0911名無しさん@お腹いっぱい。
2017/02/15(水) 04:53:01.40そう、iconvならね
0912名無しさん@お腹いっぱい。
2017/02/18(土) 04:37:58.77echo A > test.txt ; echo B >> test.txt
ARRAY=$(cat test.txt)
for item in ${ARRAY[@]}; do
echo $item
done
としたら
A
B
と表示されるので、$ARRAYは 2個の要素を持つ配列になったのだと思っていました。
ところが要素数を
echo ${#ARRAY[@]}
で表示させたら 1 が表示されます。
$ARRAYは配列になっていないのでしょうか?
だとすると、なぜ for item … で表示されたのか?
0913名無しさん@お腹いっぱい。
2017/02/18(土) 04:55:39.09echo A > test.txt; echo B >> test.txt
ARRAY=$(cat /tmp/test.txt)
for (( i=0; i<${#ARRAY[@]}; i++ )) do
printf "ARRAY index:%d value:%s\n" "$i" "${ARRAY[i]}"
done
readarray -t ARRAY2 < <(cat /tmp/test.txt)
for (( i=0; i<${#ARRAY2[@]}; i++ )) do
printf "ARRAY2 index:%d value:%s\n" "$i" "${ARRAY2[i]}"
done
0914名無しさん@お腹いっぱい。
2017/02/18(土) 05:52:55.03readarray -t ARRAY < <(cat test.txt)
で綺麗に配列として読まれますね。
これでいま作っている自作ツールが完成出来ます。
ありがとうございます
0915名無しさん@お腹いっぱい。
2017/02/18(土) 09:43:20.540916名無しさん@お腹いっぱい。
2017/02/18(土) 14:18:47.86#!/bin/bash
echo A > test.txt ; echo B >> test.txt
ARRAY=$(cat test.txt)
N=1
for item in ${ARRAY[@]}; do
echo ARRAY[$N]=$item
N=$(($N + 1))
done
としたら
ARRAY[1]=A
ARRAY[2]=B
と表示されて、配列になっているようです
0917名無しさん@お腹いっぱい。
2017/02/18(土) 16:02:36.82それは配列になってるんじゃなくてforループで一つ目の要素がsplitされてるだけ
echo A > test.txt ; echo B C >> test.txt みたいにスペースなんかが入ると対処できないからそういうコードはやめたほうがいい
for item in "${ARRAY[@]}"; do ってクウォートすると結果変わるでしょ?
あと”<(cat test.txt)”は比較のために書いただけでcatしなくても大丈夫
readarray -t ARRAY < test.txt
while readするかreadarray(=mapfile)使うか
http://mywiki.wooledge.org/BashFAQ/005#Loading_lines_from_a_file_or_stream
0918名無しさん@お腹いっぱい。
2017/02/18(土) 17:07:28.86> それは配列になってるんじゃなくてforループで一つ目の要素がsplitされてるだけ
> for item in "${ARRAY[@]}"; do ってクウォートすると結果変わるでしょ?
なるほど。
配列になっていないのと、検証の方法が間違っていたことがよく理解出来ました。
> echo A > test.txt ; echo B C >> test.txt みたいにスペースなんかが入ると対処できないからそういうコードはやめたほうがいい
気を付けます。
> あと”<(cat test.txt)”は比較のために書いただけでcatしなくても大丈夫
> readarray -t ARRAY < test.txt
> while readするかreadarray(=mapfile)使うか
> http://mywiki.wooledge.org/BashFAQ/005#Loading_lines_from_a_file_or_stream
ありがとうございます。
もっと勉強します
0919名無しさん@お腹いっぱい。
2017/02/20(月) 13:16:49.47[user@f25 ~]$ ARRAY=$(cat test.txt)
[user@f25 ~]$ declare -p ARRAY
declare -- ARRAY="A
B"
[user@f25 ~]$ readarray -t ARRAY < test.txt
[user@f25 ~]$ declare -p ARRAY
declare -a ARRAY='([0]="A" [1]="B")'
0920名無しさん@お腹いっぱい。
2017/02/20(月) 18:00:26.41declare -p !!!
知らなんだ
0921名無しさん@お腹いっぱい。
2017/02/20(月) 18:11:16.14grep -oとか
0922名無しさん@お腹いっぱい。
2017/02/21(火) 05:20:06.32ARRAY=( $(cat test.txt) )
0923名無しさん@お腹いっぱい。
2017/02/21(火) 16:45:06.28echo A > test.txt ; echo B C >> test.txt みたいにスペースなんかが入ると…
0924名無しさん@お腹いっぱい。
2017/02/21(火) 19:03:20.01ARRAY=( $(cat test.txt) )
declare -p ARRAY
とすれば空白混じりの行も1行として扱われるが、
空行(何も文字が無い行)は$ARRAYに読み込まれない
readarray -t ARRAY < test.txt
declare -p ARRAY
だと空行も読み込んでくれる
0925名無しさん@お腹いっぱい。
2017/02/28(火) 23:57:54.64みたいな時に終了コードはgrepこの場合1
でかつ標準出力にはtestが出ていて欲しいのですが
どうしたらいいでしょうか?
環境はbashです
0926名無しさん@お腹いっぱい。
2017/03/01(水) 00:40:42.45でどうだろう?
0927名無しさん@お腹いっぱい。
2017/03/01(水) 00:57:07.01常に入力をそのまま出力していいのだろうか。
0928名無しさん@お腹いっぱい。
2017/03/01(水) 01:36:33.88echo test | ( grep -v a; exit $(expr \( "$?" + 1 \) % 2 ))
0929名無しさん@お腹いっぱい。
2017/03/01(水) 02:35:11.20echo の部分は常に表示、grepは結果のみ欲しいので-qで、判定につかうインプットは常に全量表示して、結果はリターンコード、標準出力は人が見るよう、リターコードはその後のシステム的な分岐につかう的な目的です(後続はbashの世界でないのでワンライナーが嬉しい)
0930名無しさん@お腹いっぱい。
2017/03/01(水) 05:09:32.29例えば-zと-sを一緒に実行して--out でフォルダに書き出したいとして
どういうルールで並べて記述すればいいでしょうか?
sips -Z 200 * -s format jpeg --out Converted/
あれこれいじって、たまたまこれで動いたのですが
正しいのかわかりません。
よろしくお願いします。スレチだったらすいません。
0931名無しさん@お腹いっぱい。
2017/03/01(水) 09:20:45.49grep にこだわらくても良くて、GNU sed を使ってもいい場合:
$ echo test | sed '/a/!q1'
test
$ echo $?
1
0932名無しさん@お腹いっぱい。
2017/03/01(水) 09:22:21.87正しいけどスレチ
man見ろ
見られないんなら
https://developer.apple.com/legacy/library/documentation/Darwin/Reference/ManPages/man1/sips.1.html
0933名無しさん@お腹いっぱい。
2017/03/01(水) 09:41:41.920934名無しさん@お腹いっぱい。
2017/03/01(水) 09:50:14.780935名無しさん@お腹いっぱい。
2017/03/01(水) 10:04:09.41そういえばこういうスレもあったり
【Macintosh】MacでUNIX【Terminal】
http://echo.2ch.net/test/read.cgi/unix/1123501408/
mac板でよかった気もするけど
OS XをUnixとして使ってる人の為のスレ 18
http://potato.2ch.net/test/read.cgi/mac/1462475819/
0936名無しさん@お腹いっぱい。
2017/03/01(水) 10:17:52.51あ、間違えた…こうしないと
$ echo test | sed -n 'p;/a/H;${x;/./q0;q1}'
0937名無しさん@お腹いっぱい。
2017/03/01(水) 12:19:32.480938名無しさん@お腹いっぱい。
2017/03/01(水) 17:16:16.75じゃないの?
0939名無しさん@お腹いっぱい。
2017/03/01(水) 17:36:55.410940名無しさん@お腹いっぱい。
2017/03/01(水) 17:38:08.890942名無しさん@お腹いっぱい。
2017/03/04(土) 09:13:31.42うちでもよく使うが、sips なんて他には無いからな
for i *.jpg; do sips -Z 200 $i -s format jpeg --out Converted/$i; done
ところでマカーな人はbash4入れてるんですかね。bash3なので、最近ココで出てくるreadarrayが使えない
0943名無しさん@お腹いっぱい。
2017/03/04(土) 09:17:20.48for i in *.jpg ; do な
0944名無しさん@お腹いっぱい。
2017/03/04(土) 10:32:40.920945名無しさん@お腹いっぱい。
2017/03/04(土) 18:32:17.60>ところでマカーな人はbash4入れてるんですかね。
Homebrewで入れてそっち使うようにしてる
0946名無しさん@お腹いっぱい。
2017/03/07(火) 19:02:41.56自分は仕事ならcygwin(今は使ってない)、実機、仮想環境
プライベートならラズパイ、仮想環境かな
0947名無しさん@お腹いっぱい。
2017/03/07(火) 22:43:56.070948名無しさん@お腹いっぱい。
2017/03/07(火) 23:30:24.960949名無しさん@お腹いっぱい。
2017/03/08(水) 01:50:34.93SL-Zaurus(SL-C860)を今だに現役で使っているよ
0950名無しさん@お腹いっぱい。
2017/03/09(木) 02:31:23.57ただ書けるだけじゃなくて動かせたり
実際にその機械で便利に使えたりするのですか?
0951名無しさん@お腹いっぱい。
2017/03/09(木) 17:50:34.83x=$( python test.py )
はダメでした
0952名無しさん@お腹いっぱい。
2017/03/09(木) 17:58:17.55print("Hello world!")
$ python test.py
Hello world!
$ x=$(python test.py)
$ echo $x
Hello world!
0953名無しさん@お腹いっぱい。
2017/03/10(金) 09:16:11.80シェルごめんよ
0954名無しさん@お腹いっぱい。
2017/03/10(金) 13:07:41.330955名無しさん@お腹いっぱい。
2017/03/10(金) 16:08:16.57pythonのせい
0956名無しさん@お腹いっぱい。
2017/03/11(土) 22:32:29.750957名無しさん@お腹いっぱい。
2017/03/11(土) 22:46:42.79呼出し後に元に戻したいとするとsetかな
0958名無しさん@お腹いっぱい。
2017/03/11(土) 23:06:24.730959名無しさん@お腹いっぱい。
2017/03/12(日) 00:12:25.140960名無しさん@お腹いっぱい。
2017/03/12(日) 01:47:16.95bash なら "${@:2}" でええんちゃう
0961名無しさん@お腹いっぱい。
2017/03/12(日) 04:14:35.39その発想もなかった
パラメータとして渡すならこっちの方が分かりやすいな
0962名無しさん@お腹いっぱい。
2017/03/12(日) 19:17:36.56sed -n -e '/hoge1/,/hoge2/p'
これでできるのを、今知って感動中。しかも、こっちの方が速い。
そのあとの置換は
sed -n -e '/hoge1/,/hoge2/p' | sed -e 's/foo/bar/g'
としかできなかったけど
sed -n -e '/hoge1/,/hoge2/p' -e 's/foo/bar/g'
で、やる方法とかであるんですか?
0963名無しさん@お腹いっぱい。
2017/03/12(日) 20:09:10.06じゃだめなの?
0964名無しさん@お腹いっぱい。
2017/03/12(日) 20:49:35.74でもいけそう
0965名無しさん@お腹いっぱい。
2017/03/13(月) 15:22:55.400966名無しさん@お腹いっぱい。
2017/03/13(月) 17:19:42.050967名無しさん@お腹いっぱい。
2017/03/13(月) 19:49:20.42さらに速くなりました
一番最後の文字はコマンドというのを実感
0968名無しさん@お腹いっぱい。
2017/03/13(月) 20:38:32.020969名無しさん@お腹いっぱい。
2017/03/15(水) 13:36:43.930970名無しさん@お腹いっぱい。
2017/03/15(水) 13:37:42.13俺が負けだって言ったら負けなんだよ
大人しく言う事聞け
0971名無しさん@お腹いっぱい。
2017/03/15(水) 13:43:38.360972名無しさん@お腹いっぱい。
2017/03/15(水) 13:45:42.220973名無しさん@お腹いっぱい。
2017/03/15(水) 16:27:57.38お漏らししたようなものだからね
0974名無しさん@お腹いっぱい。
2017/03/15(水) 18:03:51.07それで、いつの間にか perl を代わりに使うようになった。
0975名無しさん@お腹いっぱい。
2017/03/15(水) 19:02:59.320976名無しさん@お腹いっぱい。
2017/03/15(水) 20:28:01.980977名無しさん@お腹いっぱい。
2017/03/15(水) 20:45:20.130978名無しさん@お腹いっぱい。
2017/03/15(水) 20:58:18.060979名無しさん@お腹いっぱい。
2017/03/16(木) 12:44:27.48sed -e "s/微妙に/非常に/" <975 >975
ってやって空のファイルを作ってしまったあの頃...
レス数が950を超えています。1000を超えると書き込みができなくなります。