17/02/14 15:23:50.72 .net
>>903
sh read 漢字 文字化け とかで出てほしかった…
勉強なったわサンクス
922:名無しさん@お腹いっぱい。
17/02/14 15:40:03.34 .net
sjis 文字化け でも出るで
もう少しやったな
923:894
17/02/14 16:05:30.25 .net
あー、出るには出るけど多分readとの関連に気づかなかったろうな…ダメ文字ってものをまず知らなかったし
特定の漢字が文字化けってあたりの記事から推察して、SJISがなんかマズイってとこにはたどり着いたかもしれんが、多分それでもread -rには気づかなかったと思うわ
iconv -t utf8してたと思う
924:名無しさん@お腹いっぱい。
17/02/14 17:11:17.24 .net
>>906
iconv を利用するのはアリだと思うよ。
業務系のシェルスクリプトでも「SJIS データを一時的に UTF-8 にコンバートして何らかの処理をした後に SJIS に戻す」という手法で実装することがある。
925:894
17/02/14 17:17:09.33 .net
>>907
便利だよねiconv
926:名無しさん@お腹いっぱい。
17/02/14 20:50:41.08 .net
おれは、使い慣れてるnkfでcp932→utf-8に変換してから作業してるわ。
927:名無しさん@お腹いっぱい。
17/02/15 01:22:16.71 .net
そんで戻ってこない文字が出てきて泣きそうになるまでがテンプレだね。
928:名無しさん@お腹いっぱい。
17/02/15 01:34:33.21 .net
それでもiconvなら
iconvならきっとなんとかしてくれる
929:名無しさん@お腹いっぱい。
17/02/15 04:53:01.40 .net
元がcp932なら変換不能になることはないだろう
そう、iconvならね
930:名無しさん@お腹いっぱい。
17/02/18 04:37:58.77 .net
#!/bin/bash
echo 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 … で表示されたのか?
931:名無しさん@お腹いっぱい。
17/02/18 04:55:39.09 .net
indexも表示させればわかるよ
echo 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
932:名無しさん@お腹いっぱい。
17/02/18 05:52:55.03 .net
>>914
readarray -t ARRAY < <(cat test.txt)
で綺麗に配列として読まれますね。
これでいま作っている自作ツールが完成出来ます。
ありがとうございます
933:名無しさん@お腹いっぱい。
17/02/18 09:43:20.54 .net
最初の例のやつ、多分配列になってないんじゃないか
934:名無しさん@お腹いっぱい。
17/02/18 14:18:47.86 .net
>>916
#!/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
と表示されて、配列になっているようです
935:名無しさん@お腹いっぱい。
17/02/18 16:02:36.82 .net
>>917
それは配列になってるんじゃなくて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)使うか
URLリンク(mywiki.wooledge.org)
936:名無しさん@お腹いっぱい。
17/02/18 17:07:28.86 .net
>>918
> それは配列になってるんじゃなくて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)使うか
> URLリンク(mywiki.wooledge.org)
ありがとうございます。
もっと勉強します
937:名無しさん@お腹いっぱい。
17/02/20 13:16:49.47 .net
>>919
[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")'
938:名無しさん@お腹いっぱい。
17/02/20 18:00:26.41 .net
>>920
declare -p !!!
知らなんだ
939:名無しさん@お腹いっぱい。
17/02/20 18:11:16.14 .net
このスレ来ると度々便利な知識得られるからいいわ
grep -oとか
940:名無しさん@お腹いっぱい。
17/02/21 05:20:06.32 .net
配列にするなら
ARRAY=( $(cat test.txt) )
941:名無しさん@お腹いっぱい。
17/02/21 16:45:06.28 .net
>>923
echo A > test.txt ; echo B C >> test.txt みたいにスペースなんかが入ると…
942:名無しさん@お腹いっぱい。
17/02/21 19:03:20.01 .net
IFS=$'\n'
ARRAY=( $(cat test.txt) )
declare -p ARRAY
とすれば空白混じりの行も1行として扱われるが、
空行(何も文字が無い行)は$ARRAYに読み込まれない
readarray -t ARRAY < test.txt
declare -p ARRAY
だと空行も読み込んでくれる
943:名無しさん@お腹いっぱい。
17/02/28 23:57:54.64 .net
echo test | grep a
みたいな時に終了コードはgrepこの場合1
でかつ標準出力にはtestが出ていて欲しいのですが
どうしたらいいでしょうか?
環境はbashです
944:名無しさん@お腹いっぱい。
17/03/01 00:40:42.45 .net
echo test | tee /dev/tty | grep a
でどうだろう?
945:名無しさん@お腹いっぱい。
17/03/01 00:57:07.01 .net
終了コード1のときにはその文字列を表示したいとかによって違う気がする。
常に入力をそのまま出力していいのだろうか。
946:名無しさん@お腹いっぱい。
17/03/01 01:36:33.88 .net
仕様を細かく詰めてない気がするけど とりあえず
echo test | ( grep -v a; exit $(expr \( "$?" + 1 \) % 2 ))
947:名無しさん@お腹いっぱい。
17/03/01 02:35:11.20 .net
みなさん、ありがとうございます
echo の部分は常に表示、grepは結果のみ欲しいので-qで、判定につかうインプットは常に全量表示して、結果はリターンコード、標準出力は人が見るよう、リターコードはその後のシステム的な分岐につかう的な目的です(後続はbashの世界でないのでワンライナーが嬉しい)
948:名無しさん@お腹いっぱい。
17/03/01 05:09:32.29 .net
macのsipsコマンドについて質問しても大丈夫ですか?
例えば-zと-sを一緒に実行して--out でフォルダに書き出したいとして
どういうルールで並べて記述すればいいでしょうか?
sips -Z 200 * -s format jpeg --out Converted/
あれこれいじって、たまたまこれで動いたのですが
正しいのかわかりません。
よろしくお願いします。スレチだったらすいません。
949:名無しさん@お腹いっぱい。
17/03/01 09:20:45.49 .net
>>930
grep にこだわらくても良くて、GNU sed を使ってもいい場合:
$ echo test | sed '/a/!q1'
test
$ echo $?
1
950:名無しさん@お腹いっぱい。
17/03/01 09:22:21.87 .net
>>931
正しいけどスレチ
man見ろ
見られないんなら
URLリンク(developer.apple.com)
951:名無しさん@お腹いっぱい。
17/03/01 09:41:41.92 .net
要求満たしつつ個人的に好きなのは>>927
952:名無しさん@お腹いっぱい。
17/03/01 09:50:14.78 .net
「標準出力」じゃないから要求満たしてないんじゃない?
953:名無しさん@お腹いっぱい。
17/03/01 10:04:09.41 .net
>>931
そういえばこういうスレもあったり
【Macintosh】MacでUNIX【Terminal】
スレリンク(unix板)
mac板でよかった気もするけど
OS XをUnixとして使ってる人の為のスレ 18
スレリンク(mac板)
954:名無しさん@お腹いっぱい。
17/03/01 10:17:52.51 .net
>>932
あ、間違えた…こうしないと
$ echo test | sed -n 'p;/a/H;${x;/./q0;q1}'
955:名無しさん@お腹いっぱい。
17/03/01 12:19:32.48 .net
echo test | awk '/a/{x=1}//END{exit !x}'
956:名無しさん@お腹いっぱい。
17/03/01 17:16:16.75 .net
$ echo test | awk '/a/{x=1}{print}END{exit !x}'
じゃないの?
957:名無しさん@お腹いっぱい。
17/03/01 17:36:55.41 .net
$ echo test | grep -B10000 -A10000 a
958:名無しさん@お腹いっぱい。
17/03/01 17:38:08.89 .net
あああ、1行もマッチしないとダメだ
959:名無しさん@お腹いっぱい。
17/03/01 21:54:56.86 .net
>>933 >>936
スレチにもかかわらずありがとうございました!
960:名無しさん@お腹いっぱい。
17/03/04 09:13:31.42 .net
>>931
うちでもよく使うが、sips なんて他には無いからな
for i *.jpg; do sips -Z 200 $i -s format jpeg --out Converted/$i; done
ところでマカーな人はbash4入れてるんですかね。bash3なので、最近ココで出てくるreadarrayが使えない
961:名無しさん@お腹いっぱい。
17/03/04 09:17:20.48 .net
あー in が抜けてる
for i in *.jpg ; do な
962:名無しさん@お腹いっぱい。
17/03/04 10:32:40.92 .net
ImageMagickのconvertみたいなものか
963:名無しさん@お腹いっぱい。
17/03/04 18:32:17.60 .net
>>943
>ところでマカーな人はbash4入れてるんですかね。
Homebrewで入れてそっち使うようにしてる
964:名無しさん@お腹いっぱい。
17/03/07 19:02:41.56 .net
いつもシェルが使える環境ある?
自分は仕事ならcygwin(今は使ってない)、実機、仮想環境
プライベートならラズパイ、仮想環境かな
965:名無しさん@お腹いっぱい。
17/03/07 22:43:56.07 .net
Mac
966:名無しさん@お腹いっぱい。
17/03/07 23:30:24.96 .net
俺はスマホにzsh入れてるけど
967:名無しさん@お腹いっぱい。
17/03/08 01:50:34.93 .net
>>947
SL-Zaurus(SL-C860)を今だに現役で使っているよ
968:名無しさん@お腹いっぱい。
17/03/09 02:31:23.57 .net
そういうのって
ただ書けるだけじゃなくて動かせたり
実際にその機械で便利に使えたりするのですか?
969:名無しさん@お腹いっぱい。
17/03/09 17:50:34.83 .net
pythonの出力をシェルの変数にするにはどうやれできますか?
x=$( python test.py )
はダメでした
970:名無しさん@お腹いっぱい。
17/03/09 17:58:17.55 .net
$ cat test.py
print("Hello world!")
$ python test.py
Hello world!
$ x=$(python test.py)
$ echo $x
Hello world!
971:名無しさん@お腹いっぱい。
17/03/10 09:16:11.80 .net
あれ?そうだよなと思ったら、pythonの文字コードの扱いが変でした
シェルごめんよ
972:名無しさん@お腹いっぱい。
17/03/10 13:07:41.33 .net
pythonのせいにするのもどうかと
973:名無しさん@お腹いっぱい。
17/03/10 16:08:16.57 .net
pythonは文字コード周り落とし穴が多いすぎ
pythonのせい
974:名無しさん@お腹いっぱい。
17/03/11 22:32:29.75 .net
$@から$1を除いたものを関数に渡す方法を教えてくだしあ
975:名無しさん@お腹いっぱい。
17/03/11 22:46:42.79 .net
shiftするしかないんじゃないかな
呼出し後に元に戻したいとするとsetかな
976:名無しさん@お腹いっぱい。
17/03/11 23:06:24.73 .net
呼び出し先でshiftすりゃいいじゃん
977:名無しさん@お腹いっぱい。
17/03/12 00:12:25.14 .net
せやな!
978:名無しさん@お腹いっぱい。
17/03/12 01:47:16.95 .net
>>957
bash なら "${@:2}" でええんちゃう
979:名無しさん@お腹いっぱい。
17/03/12 04:14:35.39 .net
>>961
その発想もなかった
パラメータとして渡すならこっちの方が分かりやすいな
980:名無しさん@お腹いっぱい。
17/03/12 19:17:36.56 .net
ずっと、行の抜き出しはprcegrepを使ってたげど
sed -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'
で、やる方法とかであるんですか?
981:名無しさん@お腹いっぱい。
17/03/12 20:09:10.06 .net
sed -n -e 's/foo/bar/g' -e '/hoge1/,/hoge2/p'
じゃだめなの?
982:名無しさん@お腹いっぱい。
17/03/12 20:49:35.74 .net
sed -ne '/hoge1/,/hoge2/{s/foo/bar/g;p;}'
でもいけそう
983:名無しさん@お腹いっぱい。
17/03/13 15:22:55.40 .net
sedスレあるのに忘れられてそうw
984:名無しさん@お腹いっぱい。
17/03/13 17:19:42.05 .net
sed -e '/hoge1/,/hoge2/!d' -e 's/foo/bar/g'
985:名無しさん@お腹いっぱい。
17/03/13 19:49:20.42 .net
ありがとうございます
さらに速くなりました
一番最後の文字はコマンドというのを実感
986:名無しさん@お腹いっぱい。
17/03/13 20:38:32.02 .net
sedは-n使ったら負け
987:名無しさん@お腹いっぱい。
17/03/15 13:36:43.93 .net
なんで?
988:名無しさん@お腹いっぱい。
17/03/15 13:37:42.13 .net
うるさい!
俺が負けだって言ったら負けなんだよ
大人しく言う事聞け
989:名無しさん@お腹いっぱい。
17/03/15 13:43:38.36 .net
なんだそのダメな親みたいな言い分は
990:名無しさん@お腹いっぱい。
17/03/15 13:45:42.22 .net
むしろジャイアンかな
991:名無しさん@お腹いっぱい。
17/03/15 16:27:57.38 .net
pでプリントした行は元質問にもあるようにストリームを流れて行かない、
お漏らししたようなものだからね
992:名無しさん@お腹いっぱい。
17/03/15 18:03:51.07 .net
sed だと、後方参照の時にバックスラッシュでエスケープしまくることになるのがどうにも…
それで、いつの間にか perl を代わりに使うようになった。
993:名無しさん@お腹いっぱい。
17/03/15 19:02:59.32 .net
sedでできることをperlでやるのは微妙に悔しいw
994:名無しさん@お腹いっぱい。
17/03/15 20:28:01.98 .net
sed -e "s/微妙に/非常に/" >976
995:名無しさん@お腹いっぱい。
17/03/15 20:45:20.13 .net
入力なくね?
996:名無しさん@お腹いっぱい。
17/03/15 20:58:18.06 .net
考えすぎ
997:名無しさん@お腹いっぱい。
17/03/16 12:44:27.48 .net
>>978
sed -e "s/微妙に/非常に/" <975 >976
ってやって空のファイルを作ってしまったあの頃...
998:名無しさん@お腹いっぱい。
17/03/16 12:47:16.46 .net
分からんでもない
999:名無しさん@お腹いっぱい。
17/03/16 16:23:09.20 .net
最初に head/tail、grep、sort 辺りを処理の都合上先にやることが多いので、
sed の入力にはパイプを使うことが多いかな。
1000:名無しさん@お腹いっぱい。
17/03/16 22:48:37.43 .net
日本語下手かw
1001:名無しさん@お腹いっぱい。
17/03/18 22:25:35.75 .net
grepしてsedは素人
1002:名無しさん@お腹いっぱい。
17/03/18 23:27:17.30 .net
なんで?
1003:名無しさん@お腹いっぱい。
17/03/19 00:04:19.09 .net
sedだけでできるからかと
1004:名無しさん@お腹いっぱい。
17/03/19 00:24:39.59 .net
grepである程度簡単なワードで絞ってからのほうが、複雑な置換は早そうだけど
1005:名無しさん@お腹いっぱい。
17/03/19 00:57:36.33 .net
実験して見せられるまで性能に関する予想は信じない
1006:名無しさん@お腹いっぱい。
17/03/19 01:06:54.08 .net
まぁこじらせた人にてみればその手間は実に腹立つだろうな
1007:名無しさん@お腹いっぱい。
17/03/19 10:07:51.17 .net
「ひとつのことを上手くやる」から考えると、grep してから sed の方がマッチしてそう
1008:名無しさん@お腹いっぱい。
17/03/19 11:41:33.99 .net
windowsのdos窓は使えるけれど、grep、sed、awk、perlなどはなし。当然他のスクリプト言語もなし。
さらに、新たなソフトのインスコはできない。
まあ、notepadでソースの編集はできる。
Eドライブには多くのフォルダがあって、中にはjpegのえろ画像が1テラ分てんこ盛り
えろ画像だけを全部Dドライブにコピーしたい。
Eドライブのフォルダを見ると8階層ぐらいのフォルダもあって、とても手作業のコピペはムリ。
にゃんとか目的を達成する方法はないであろうか?!
各位のお知恵を拝借したい。
1009:名無しさん@お腹いっぱい。
17/03/19 13:00:13.49 .net
powershell でも使えばいいんじゃないかな
1010:名無しさん@お腹いっぱい。
17/03/19 14:12:15.82 .net
ここじゃなくてもっと他に聞くべき所があるだろうな
1011:名無しさん@お腹いっぱい。
17/03/19 20:18:27.47 .net
その環境的な制限がありつつ、エロ画像を扱うという状況が想像できないな
仕事でエロ画像を扱ってるか上司の個人環境とかかな
1012:名無しさん@お腹いっぱい。
17/03/19 20:31:39.22 .net
robocopyでコピーすれば良い
1013:名無しさん@お腹いっぱい。
17/03/19 20:55:37.07 .net
>>988
GNU grep + GNU awk の場合だけど、GNU awk単独よりも早いらしいぞ
URLリンク(papiro.hatenablog.jp)
1014:名無しさん@お腹いっぱい。
17/03/19 22:03:55.18 .net
ドライブを別のPCからアクセス可能にしたらいいのに
1015:名無しさん@お腹いっぱい。
17/03/19 23:09:48.69 .net
>>996
timeの使い方を知らないって事を自慢してどうしたいんだ?
1016:名無しさん@お腹いっぱい。
17/03/19 23:10:46.82 .net
エロ画像に寛容なUNIX板
1017:名無しさん@お腹いっぱい。
17/03/20 10:44:19.74 .net
>>994
昔社内から netnews が見れてたので perl でスクリプト組んでエロ画像落としまくってたのをふと思い出した
当時は普通にFDに移動して持ち帰ってたけど
1018:名無しさん@お腹いっぱい。
17/03/20 12:06:05.49 .net
俺にはもうFDってのがもうすごいわ
1019:過去ログ ★
[過去ログ]
■ このスレッドは過去ログ倉庫に格納されています