シェルスクリプト総合 その29
レス数が950を超えています。1000を超えると書き込みができなくなります。
!extend:on:vvvvv:1000:512
!extend:on:vvvvv:1000:512
シェルスクリプトに関する総合スレッドです。
スレ立て時は以下の文を先頭行に加えて下さい。
後のつけ忘れ防止の為に複数行重ねて追加推奨
!extend:on:vvvvv:1000:512
全般
・荒しは無視しましょう。
・丁寧な姿勢を心掛けましょう。
・ネチケット(死語)を意識しましょう。
前スレ
シェルスクリプト総合 その28
http://mevius.5ch.net/test/read.cgi/tech/1532397676/
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured 訂正 自分でシェルスクリプト版watchを実装しろ 区切り文字を指定して文字列を分割するときに
区切り文字が一種類の場合はcut(1)とかを使うし
区切り文字がBREで表わされるような場合はAWKを使うけど
各フィールド毎に特定の区切り文字があるような時はどうすればいいかな。
今やろうとしていることはISO 8601形式の日付を空白区切りに分解することで
2018-12-30T08:36:50+09:00
↑こういう文字列を
2018 12 30 08 36 50 + 09 00
↑こういう空白区切りに分解したい。
その為には「第1,2,3フィールドはハイフン,第4フィールドは文字T,第5,6,7フィールドはコロンで分割する」
っていう具合の処理を考えないといけない。
正直,sedを使えばいいんだけど,もうちょっとスマートな方法があれば教えてほしい……。
sedだと↓
sed -n -e 's/\([[:digit:]]\{4\}\)-\([[:digit:]]\{2\}\)-\([[:digit:]]\{2\}\)T\([[:digit:]]\{2\}\):\([[:digit:]]\{2\}\):\([[:digit:]]\{2\}\)\([+-]\)\([[:digit:]]\{2\}\):\([[:digit:]]\{2\}\)/D:\1\2\3\4\5\6\7\8'"'"'\9/1p'
↑こんなことになるw >>869
入力形式が確定しているから単純化して
sed 's/[-+:T]/ /g'
とかはどう? >>870
書き込んでから気づいたがこれだと+の周りが処理できないな >>871
そうなんだよね……
もし+に特殊な処理をしないならば
tr '-+:T' ' '
で一発なんだけど、できないんだよ。 sed 's/+/ + /;s/[-:T]/ /g'
では?? >>869
#!/bin/sh
t="2018-12-30T08:36:50+09:00"
IFS="-T:+"
set -- $t
echo $1 $2 $3 $4 $5 $6 + $7 $8 sed 's/-/ /;s/-/ /;s/\([+-]\)/ \1 /;s/[:T]/ /g'
なんか泥臭いけど #!/bin/sh
t="2018-12-30T08:36:50+09:00"
IFS="-T:+"
set -- $t
case ${t%?????} in
*+) echo $1 $2 $3 $4 $5 $6 + $7 $8 ;;
*-) echo $1 $2 $3 $4 $5 $6 - $7 $8 ;;
esac date -d "2018-12-30T08:36:50-09:00" "+%Y 略" (飽きた) >>874
それだとアメリカとかのタイムゾーン-03:00に対応できなくね? GNU grep の場合
$ echo '2018-12-30T08:36:50+09:00' | grep -Po '([0-9]{2,4}|(?<=:[0-9]{2})(\+|-))' | xargs >>881
すげー。
でも後から自分でデバッグできなさそうなのでやめておくw t="2018-12-30T08:36:50+09:00"
echo "${t:0:4} ${t:5:2} ${t:8:2} ${t:11:2} ${t:14:2} ${t:17:2} ${t:19:1} ${t:20:2} ${t:23:2}" :digit:より0-9のほうが打件数少ないのはなんなんだ 本当に一部のシステムでの話だけど
[:digit:]がロケールの数値表現にも合致する場合がある
「1」とか。 test.txtの内容が
hoge
fuga
puge
で、
sed -i -e s/hoge\n// test.txt
とやったのに『hoge(改行コード)』が消えてくれないたすけて
test.txtの一行目を削除 → 2行目が一行目に、
みたいにトコロテンしたい 自己解決・・・
sed -i -e ':a;N;$!ba;s/hoge\n//' test.txt
ってやったらできました・・何この呪文。。 sed -i -e '/hoge/d' test.txt じゃダメなん? >>889
で、できました
それ使っていきます ありがとうございました ネットワーク通信(特にhttpクライアント)に関するコマンドって
大きくwgetとcurlとfetchなんかがあるけどもみんなはなに使ってます?
大抵のLinuxにはwgetが、MacとWindowsにはcurlが初期搭載されてるので
そのどっちかだとは思う。 スクリプトの場合はオプションが面倒くさくいのは関係ないから
個人的には自由度の高いcurl一択かな
直接コマンド打ってダウンロードするときはaria2cを使ったりする wgetが入っていればwget、curlが入っていればcurl
両方入っているなら、ファイルにしたいときはwget、出力結果を見たいときはcurl PowerShell では、Invoke-WebRequest のalias が、curl, wget
get-alias (gal) で表示できる >>900
え、それつまり
$ curl ...
としたときのオプションは実はcurlのじゃなくて
Invoke-WebRequestに向けたオプションってこと?
そんなに互換性があるオプション体系だとは思わないのだけど
なぜエイリアスにしてあるんだろう……。 呼ばれたときの名前によって処理を切り替えてるんじゃないの?知らんけど bashで「=」という文字をコマンドにすることってできますかね。
「=」を「bc -l <<<」に割り当てて
$ = '4 / 5.1'
みたいな簡易電卓として使いたいなと思ったんだけど
alias =='bc -l <<<'やfunction = { bc -l <<< "$1" }はダメ……。
一応GNU Bashの「コマンドに使っていい文字」ではあるんだけど、使えない =というファイル名のシェルスクリプト書いたら?
bashもいらんし
#!/bin/sh
echo "$@" | bc -l function = { bc -l <<< "$1"; } ってすればできる(セミコロンが必要) シェルスクリプトの練習になるオススメサイトありますか? 水泳の練習になるオススメサイトありますか?
そう聞かれたらなんて答える? いけずな野郎だな
お題があってそれを解くっていうのを練習と呼ぶなら
paizaあたりがシェルスクリプトも受け付けてたかも 自分の作りたいもん作れよ、それ以上効率の良い学習方法はない 今からシェルスクリプトに手を出すんならPOSIX 2017の規格文書とかが
なんと無償で公開されてるので非常にやりやすいと思うよ。
GNUの日本語訳されたマニュアルでもいいし、少なくともドキュメントとしては
今は過去一番に恵まれた時代だと感じている。 一応この板にもお題スレあるけどね。
この頃過疎ってるかな。 シェルっていうかAWKのことなんですけど
今の時代に「AWKを256倍使うための本」って読んでためになりますか。
それこそFORTRAN66向けの解説書は最低でもFortran 90/95あたりを使う現在では
ほとんど役に立ちませんよね。
ですがAWKは昔からほとんど仕様が変わっていないので、
古い書籍でも役立ちそうではあります。 >>916
スレチ
あるなら嫁
100円以上出す価値はない gawk(4以降)を使わないなら昔のawk本で勉強してもいいと思う。 256本って、役に立つことも書いてあるネタ本だろう?
勉強ってw 「256倍」のAWKって,POSIX awkともちょっと違うんだよねw
だからあんまり真に受けないほうがいい >>922
そういうしょうもない言いがかりでマウント取りたがる奴のほうが
今の時代みっともないと笑われがちだけどね てかバカてなんでシェルだとどおにかなると思っとるん? 5ch とかで○○の意味ガーとか言う奴はアスペか基地外だから放置しとけ シェルは簡単やけどシェルがおまえバカのを補える訳とちゃうでw シェルスクリプト程難しいプログラミング言語も珍しい いまだにシェルのことシェルスクリプトと言い張るバカおるんやなw シェルスクリプトと言うからおかしくなるんであって
バッチプログラムと言った方が良くない?
スクリプトと言うほど大袈裟でもないんだけどね scriptが台本のことだと知っていれば、シェルスクリプトこそ正当なスクリプトだろ。
そのあとperlスクリプトとか呼ばれてあの手の言語がスクリプト言語に分類され、
ただのインタプリタ系プログラムまでスクリプトに含められてしまった。 >>935
そんなこと言ったら「プログラム」もおかしいよね
プログラムは式次第って意味だから「関数型プログラミング言語」なんて意味が通らない
式次第って意味と乖離が少なかったのはそれこそFORTRANとかだよね。
……って良い出したらキリがないから、別に「Pyhtonスクリプト」と呼んでもいいんじゃね? >>936
> プログラムは式次第って意味だから
プログラムは運動会のプログラムと一緒で
実行計画だろ? その実行計画を「式次第」って言うんじゃね?
運動会ではあまり使われないけど
卒業式のプログラムは「式次第」って呼ばれるじゃん。 移植可能なMakefileについての覚書
The Open Groupによると
The best way to provide portable makefiles is to include all of the rules needed in the makefile itself.
The rules provided use only features provided by other parts of this volume of POSIX.1-2017.
The default rules include rules for optional commands in this volume of POSIX.1-2017.
Only rules pertaining to commands that are provided are needed in an implementation's default set. 実行計画のうち特に式典に用いられるのが式次第だろ
式じゃないんだから、単に実行計画で良い >>944
キメーんだよ、クソ人間が
カタカタカタ… ほかにも動物の名前のコマンドあるかな。
人の名前はあるけど(man)。 fish って聞くと x68k の fish の方を連想してしまう fish、イタリア語でPesciペッシ。
ジョジョで覚えたぞ! http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap04.html#tag_04_23
ここのNoteに「〈記号〉=〈値〉の形の構文の挙動は未定義である。Kornシェル用いられている」
とあるのですが実際にKornシェルで↑この形の構文はどういう意味なのでしょうか。 シェルでコマンドの出力結果を(lsなど)データベースに入れたいのですが
どのようにすればいいかわかりますか?
できればその時のIpアドレスも一緒にいれればいいのですが
普通にテキストに入れるには
できないのでしょうか
ディレクトリも入れれば最高です
dbはsqlite3でフィールドはディレクトリ内容とディレクトリの2フィールドにいれたいのです レス数が950を超えています。1000を超えると書き込みができなくなります。