シェルスクリプト総合 その29

レス数が950を超えています。1000を超えると書き込みができなくなります。
2018/09/22(土) 11:53:21.38ID:BBiLRgnj0
!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
2018/12/23(日) 14:09:56.35ID:yUjQiXy10
>>848
IFSで指定しろ
852デフォルトの名無しさん (ワッチョイ 9b9f-q1e7)
垢版 |
2018/12/23(日) 14:18:28.55ID:nNQ759QC0
でもってこれ。bash のパス名展開。

https://linuxjm.osdn.jp/html/GNU_bash/man1/bash.1.html#lbBG

この中に +(pattern-list) というのがある。
なので例えばこんなことも出来る。

a="a b c d" # ← 複数のスペースを適当に入れた文字列を a にセット
b="${a//+( )/ }" # ← 全ての1文字以上のスペースを1文字のスペースに変換して b にセット
2018/12/23(日) 15:08:28.31ID:eEMSqKaq0
>>848
ちょっと目的と違うかもしれんが
trコマンドの-sオプションもお勧めだよ。
POSIXで定められているので汎用性高いし、あとawkやsedを使う方法より若干高速
2018/12/23(日) 15:10:20.98ID:yUjQiXy10
外部コマンドを呼び出している以上
遅くなることに変わりはない
2018/12/23(日) 16:10:20.07ID:eEMSqKaq0
「awkやsedを使う方法より」
2018/12/23(日) 16:20:58.12ID:yUjQiXy10
「awkやsedを使う方法より若干高速
と言ったって外部コマンドを呼び出している以上
遅くなることに変わりはない」
2018/12/23(日) 16:57:53.53ID:snCJQSVKM
awkやsedより遅いの?違うでしょ?日本語勉強しなよ。
2018/12/23(日) 17:02:15.89ID:yUjQiXy10
bashだけでやるより遅いって話をしてる所に
awkやsedよりも早いって言うことに意味がないと言ってる
2018/12/23(日) 17:12:57.88ID:jos3UrGDa
まーた始まったよ(パリポリ
2018/12/23(日) 17:15:39.87ID:YhyQsVDP0
             )ソ)
          ッλ ノ(.,ノ)
         (゙- ..::.::. . (
        (ソ.  .彡⌒ミ. )ソ)
        ).::'; (´・ω・`) ス (
       ソ .::;';'(つ ⊂)::;';'`〜、.
       (  :;';' |__∧_| ::;';'  ヽ)
`'~`'''`'`'`~'~~`~~'`'`''''"`'`'`''`''''"`'``'~`''`'~`'''`'`'`~
 さ あ 禿 げ 上 が っ て ま い り ま し た
2018/12/23(日) 17:15:41.10ID:yUjQiXy10
しーかたないねー(パリポリ
2018/12/23(日) 17:46:37.96ID:eD9rxy9Z0
あ?やんのかこら
2018/12/23(日) 17:47:26.96ID:GvU/LsqE0
>>857
質問者の意図を汲み取りましょうw
2018/12/23(日) 20:07:54.91ID:0+7qAFFh0
今時汲み取り式なんて・・・
2018/12/23(日) 20:36:12.95ID:W0WvAA710
>>852
ほんと感謝します
ようやくすっきりしました。
そのサイトにも行き着いていたのですが、ちゃんと読めていませんでした
ありがとうございました。

>>853
trコマンドは知ってますし、今回も使いました。
今回の処理は結局、全処理c++で書き直したりもしてるんで、
他のツール使えばできるとかの情報は全く必要なく
あくまでもbash単体で処理するにはどうするかということでここで質問しました
bashでの正規表現に関する情報があまりなくて、
20年ほど前に買ったオライリーのbash本にも正規表現の記載が一切なく
bashの正規表現に制限があるならそれを教えてもらうことも目的でここで聞きました。
2018/12/26(水) 09:38:30.84ID:GigxKnwz0
watchで表示更新時間ごとに変数の加算は出来ませんか?
2018/12/26(水) 11:17:37.79ID:SKc2oSlY0
無理。自分でwatchを実装しろ
2018/12/26(水) 11:19:29.41ID:SKc2oSlY0
訂正 自分でシェルスクリプト版watchを実装しろ
2018/12/30(日) 08:42:00.02ID:btIksil/0
区切り文字を指定して文字列を分割するときに
区切り文字が一種類の場合は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
2018/12/30(日) 10:20:55.12ID:Ob5186rT0
>>869
入力形式が確定しているから単純化して
sed 's/[-+:T]/ /g'
とかはどう?
2018/12/30(日) 10:23:20.84ID:Ob5186rT0
>>870
書き込んでから気づいたがこれだと+の周りが処理できないな
872デフォルトの名無しさん (ワッチョイ c6be-DhLY)
垢版 |
2018/12/30(日) 10:40:37.85ID:btIksil/0
>>871
そうなんだよね……
もし+に特殊な処理をしないならば
tr '-+:T' ' '
で一発なんだけど、できないんだよ。
2018/12/30(日) 10:53:56.67ID:MMB+AHvh0
sed 's/+/ + /;s/[-:T]/ /g'
では??
2018/12/30(日) 11:01:57.94ID:/wKH6dhf0
>>869
#!/bin/sh
t="2018-12-30T08:36:50+09:00"
IFS="-T:+"
set -- $t
echo $1 $2 $3 $4 $5 $6 + $7 $8
2018/12/30(日) 11:08:31.89ID:MMB+AHvh0
タイムゾーンはマイナスありか
2018/12/30(日) 11:25:42.74ID:MMB+AHvh0
sed 's/-/ /;s/-/ /;s/\([+-]\)/ \1 /;s/[:T]/ /g'
なんか泥臭いけど
2018/12/30(日) 11:28:51.37ID:/wKH6dhf0
#!/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
2018/12/30(日) 11:32:49.36ID:/wKH6dhf0
date -d "2018-12-30T08:36:50-09:00" "+%Y 略" (飽きた)
2018/12/30(日) 11:48:16.88ID:btIksil/0
>>874
それだとアメリカとかのタイムゾーン-03:00に対応できなくね?
2018/12/30(日) 11:49:02.96ID:btIksil/0
>>877
すまん。ちゃんと対応してくれてた。
2018/12/30(日) 16:00:37.71ID:yEx+bcWd0
GNU grep の場合

$ echo '2018-12-30T08:36:50+09:00' | grep -Po '([0-9]{2,4}|(?<=:[0-9]{2})(\+|-))' | xargs
2018/12/30(日) 16:49:11.50ID:btIksil/0
>>881
すげー。
でも後から自分でデバッグできなさそうなのでやめておくw
2018/12/30(日) 18:51:33.10ID:iF2NHAVN0
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}"
2019/01/01(火) 13:16:40.82ID:0CXB5czV0
:digit:より0-9のほうが打件数少ないのはなんなんだ
2019/01/01(火) 13:57:25.01ID:WRhsD0vEa
単に意味を優先した表現方法があるだけやろ
2019/01/05(土) 11:12:13.83ID:dE0KuiGH0
本当に一部のシステムでの話だけど
[:digit:]がロケールの数値表現にも合致する場合がある
「1」とか。
2019/01/07(月) 14:59:50.50ID:01rSRjtda
test.txtの内容が
hoge
fuga
puge

で、
sed -i -e s/hoge\n// test.txt
とやったのに『hoge(改行コード)』が消えてくれないたすけて
test.txtの一行目を削除 → 2行目が一行目に、
みたいにトコロテンしたい
2019/01/07(月) 15:08:57.37ID:01rSRjtda
自己解決・・・
sed -i -e ':a;N;$!ba;s/hoge\n//' test.txt
ってやったらできました・・何この呪文。。
2019/01/07(月) 15:30:19.88ID:RynyI9pj0
sed -i -e '/hoge/d' test.txt じゃダメなん?
2019/01/07(月) 15:36:38.32ID:01rSRjtda
>>889
で、できました
それ使っていきます ありがとうございました
891デフォルトの名無しさん (アウアウウー Sa9d-KJeM)
垢版 |
2019/01/07(月) 19:03:53.04ID:fnTlHl64a
grep -v もよろしく
2019/01/07(月) 19:52:44.45ID:fRqqYmWxa
一行目を消したいのかhogeを消したいのか
2019/01/07(月) 19:54:56.69ID:52D4hsE60
全部消したい。何もかも
2019/01/07(月) 20:31:04.88ID:Opohu4pM0
要らない
何も
消してしまおう
895デフォルトの名無しさん (アウアウウー Sa9d-KJeM)
垢版 |
2019/01/08(火) 09:33:22.38ID:LJT6VvGba
そんなあなたに rm
2019/01/10(木) 04:57:31.17ID:yVo/NDAD0
ネットワーク通信(特にhttpクライアント)に関するコマンドって
大きくwgetとcurlとfetchなんかがあるけどもみんなはなに使ってます?
大抵のLinuxにはwgetが、MacとWindowsにはcurlが初期搭載されてるので
そのどっちかだとは思う。
2019/01/10(木) 09:31:04.31ID:d7ZwxpvN0
スクリプトの場合はオプションが面倒くさくいのは関係ないから
個人的には自由度の高いcurl一択かな

直接コマンド打ってダウンロードするときはaria2cを使ったりする
898デフォルトの名無しさん (アウアウウー Sa89-JzEj)
垢版 |
2019/01/10(木) 10:00:22.11ID:jQehovm3a
昔から使ったていたというだけの理由で wget
2019/01/10(木) 11:40:29.86ID:DS8wsvUQ0
wgetが入っていればwget、curlが入っていればcurl
両方入っているなら、ファイルにしたいときはwget、出力結果を見たいときはcurl
2019/01/10(木) 16:56:41.32ID:jhx89QXs0
PowerShell では、Invoke-WebRequest のalias が、curl, wget

get-alias (gal) で表示できる
2019/01/10(木) 18:31:34.76ID:yVo/NDAD0
>>900
え、それつまり
$ curl ...
としたときのオプションは実はcurlのじゃなくて
Invoke-WebRequestに向けたオプションってこと?
そんなに互換性があるオプション体系だとは思わないのだけど
なぜエイリアスにしてあるんだろう……。
2019/01/10(木) 20:31:11.75ID:UUY7OixDM
呼ばれたときの名前によって処理を切り替えてるんじゃないの?知らんけど
2019/01/10(木) 22:34:40.34ID:qJAnpZ0RM
cURL以外使わん
2019/01/11(金) 03:35:07.12ID:tAdCcMWb0
bashで「=」という文字をコマンドにすることってできますかね。
「=」を「bc -l <<<」に割り当てて
$ = '4 / 5.1'
みたいな簡易電卓として使いたいなと思ったんだけど
alias =='bc -l <<<'やfunction = { bc -l <<< "$1" }はダメ……。
一応GNU Bashの「コマンドに使っていい文字」ではあるんだけど、使えない
2019/01/11(金) 05:36:31.36ID:YPYEBq870
=というファイル名のシェルスクリプト書いたら?
bashもいらんし

#!/bin/sh
echo "$@" | bc -l
2019/01/11(金) 08:51:55.60ID:EZ88NWNa0
function = { bc -l <<< "$1"; } ってすればできる(セミコロンが必要)
2019/01/14(月) 22:03:31.41ID:s6eFaywu0
>>906
ありがとう。
2019/01/15(火) 01:10:29.39ID:ejrN1XYw0
シェルスクリプトの練習になるオススメサイトありますか?
2019/01/15(火) 04:03:33.32ID:XDACXjEE0
水泳の練習になるオススメサイトありますか?
そう聞かれたらなんて答える?
2019/01/15(火) 07:25:22.93ID:MVbWnd0w0
いけずな野郎だな

お題があってそれを解くっていうのを練習と呼ぶなら
paizaあたりがシェルスクリプトも受け付けてたかも
2019/01/15(火) 07:38:45.50ID:1yCDbXwJ0
自分の作りたいもん作れよ、それ以上効率の良い学習方法はない
2019/01/15(火) 07:52:39.97ID:omEovS4H0
作りたいもの作れる環境がいい
2019/01/15(火) 09:04:11.62ID:ejrN1XYw0
どうもありがとうございます!
2019/01/15(火) 18:52:38.58ID:TWtv3hHM6
今からシェルスクリプトに手を出すんならPOSIX 2017の規格文書とかが
なんと無償で公開されてるので非常にやりやすいと思うよ。
GNUの日本語訳されたマニュアルでもいいし、少なくともドキュメントとしては
今は過去一番に恵まれた時代だと感じている。
915デフォルトの名無しさん (ワッチョイ ce02-H432)
垢版 |
2019/01/16(水) 17:58:43.79ID:ECRqnYoc0
一応この板にもお題スレあるけどね。
この頃過疎ってるかな。
2019/01/18(金) 08:45:17.67ID:XZjr/At96
シェルっていうかAWKのことなんですけど
今の時代に「AWKを256倍使うための本」って読んでためになりますか。
それこそFORTRAN66向けの解説書は最低でもFortran 90/95あたりを使う現在では
ほとんど役に立ちませんよね。
ですがAWKは昔からほとんど仕様が変わっていないので、
古い書籍でも役立ちそうではあります。
2019/01/18(金) 09:04:38.86ID:vsGuf730a
その本は知らんがawkは使える
2019/01/18(金) 12:00:20.35ID:hbAtvXtm0
>>916
スレチ
あるなら嫁
100円以上出す価値はない
2019/01/19(土) 01:03:50.64ID:0IErEZcU0
gawk(4以降)を使わないなら昔のawk本で勉強してもいいと思う。
2019/01/19(土) 02:01:46.56ID:fE346DRA0
256本って、役に立つことも書いてあるネタ本だろう?
勉強ってw
2019/01/19(土) 07:54:11.84ID:AOD6Gi8l0
「256倍」のAWKって,POSIX awkともちょっと違うんだよねw
だからあんまり真に受けないほうがいい
922デフォルトの名無しさん (ワッチョイ 09c5-VA2m)
垢版 |
2019/01/19(土) 20:03:41.30ID:AuMD8hxP0
真にうけるの意味を知らんバカ、笑う
2019/01/19(土) 23:00:56.72ID:Kq2NO2td0
>>922
そういうしょうもない言いがかりでマウント取りたがる奴のほうが
今の時代みっともないと笑われがちだけどね
2019/01/19(土) 23:07:49.10ID:+IqL7b8U0
>>923
>>923
925デフォルトの名無しさん (ワッチョイ 09c5-VA2m)
垢版 |
2019/01/19(土) 23:50:22.30ID:AuMD8hxP0
言いがかりの意味を知らんバカ、ガチ
926デフォルトの名無しさん (ワッチョイ 09c5-VA2m)
垢版 |
2019/01/19(土) 23:51:10.14ID:AuMD8hxP0
てかバカてなんでシェルだとどおにかなると思っとるん?
2019/01/20(日) 02:31:28.62ID:2YimV45u0
↑意味不明なことを言い出し始めたぞ?
2019/01/20(日) 06:00:57.22ID:mVpLWWyp0
5ch とかで○○の意味ガーとか言う奴はアスペか基地外だから放置しとけ
2019/01/20(日) 09:22:33.90ID:yjbEV8Owa
ようやく俺と同じ意見の奴を5chで見つけた
930デフォルトの名無しさん (ワッチョイ 09c5-VA2m)
垢版 |
2019/01/20(日) 18:32:53.82ID:wKV5+GB/0
バカ戸惑っとるやんw
931デフォルトの名無しさん (ワッチョイ 09c5-VA2m)
垢版 |
2019/01/20(日) 19:44:46.86ID:wKV5+GB/0
シェルは簡単やけどシェルがおまえバカのを補える訳とちゃうでw
2019/01/20(日) 21:42:45.99ID:EDhkDxLO0
シェルスクリプト程難しいプログラミング言語も珍しい
933デフォルトの名無しさん (ワッチョイ 09c5-VA2m)
垢版 |
2019/01/20(日) 22:05:16.75ID:wKV5+GB/0
いまだにシェルのことシェルスクリプトと言い張るバカおるんやなw
934デフォルトの名無しさん (ワッチョイ 9b02-7XZ4)
垢版 |
2019/01/21(月) 09:59:58.31ID:+0V9hUvv0
シェルスクリプトと言うからおかしくなるんであって
バッチプログラムと言った方が良くない?
スクリプトと言うほど大袈裟でもないんだけどね
2019/01/21(月) 10:16:19.43ID:J1WbOjYrM
scriptが台本のことだと知っていれば、シェルスクリプトこそ正当なスクリプトだろ。
そのあとperlスクリプトとか呼ばれてあの手の言語がスクリプト言語に分類され、
ただのインタプリタ系プログラムまでスクリプトに含められてしまった。
2019/01/21(月) 10:51:13.07ID:uncS2Ppy0
>>935
そんなこと言ったら「プログラム」もおかしいよね
プログラムは式次第って意味だから「関数型プログラミング言語」なんて意味が通らない
式次第って意味と乖離が少なかったのはそれこそFORTRANとかだよね。

……って良い出したらキリがないから、別に「Pyhtonスクリプト」と呼んでもいいんじゃね?
2019/01/21(月) 10:54:29.54ID:J1WbOjYrM
そうだね
2019/01/21(月) 11:39:25.83ID:kN5K6Fst0
script kitty
https://i.imgur.com/oMseW2P_d.jpg
2019/01/21(月) 12:26:30.35ID:DqxQvGU+0
>>936
> プログラムは式次第って意味だから

プログラムは運動会のプログラムと一緒で
実行計画だろ?
2019/01/21(月) 12:40:07.37ID:uncS2Ppy0
その実行計画を「式次第」って言うんじゃね?
運動会ではあまり使われないけど
卒業式のプログラムは「式次第」って呼ばれるじゃん。
2019/01/21(月) 12:41:28.01ID:uncS2Ppy0
移植可能な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.
2019/01/21(月) 13:20:33.70ID:DqxQvGU+0
実行計画のうち特に式典に用いられるのが式次第だろ
式じゃないんだから、単に実行計画で良い
2019/01/21(月) 13:27:38.12ID:kW4uGJLza
知ってんだよォォ
国語の教師かオメーはよォォ
944デフォルトの名無しさん (アウアウウー Sa15-4KIe)
垢版 |
2019/01/21(月) 13:40:03.75ID:chW+Guj1a
>>938
(*´Д`)ハァハァ
2019/01/21(月) 21:36:42.73ID:Z7YPhckpM
>>944
キメーんだよ、クソ人間が
カタカタカタ…
946デフォルトの名無しさん (アウアウウー Sa15-4KIe)
垢版 |
2019/01/22(火) 09:17:01.15ID:J1mDHp9Ya
にゃ
2019/01/22(火) 10:55:23.70ID:L0BlvLx7r
国語の時間はここまでっ!
948デフォルトの名無しさん (オッペケ Sr1d-+JtR)
垢版 |
2019/01/22(火) 12:18:47.44ID:aO6rlwOPr
よーし!今から保健体育の時間な!
949デフォルトの名無しさん (アウアウウー Sa15-4KIe)
垢版 |
2019/01/22(火) 12:32:24.54ID:J1mDHp9Ya
猫のスレができたと聞いて
2019/01/26(土) 17:13:20.64ID:VBVSKLLT0
ほかにも動物の名前のコマンドあるかな。
人の名前はあるけど(man)。
2019/01/26(土) 17:35:41.04ID:t83jnK1u0
fox(狐)はないか
レス数が950を超えています。1000を超えると書き込みができなくなります。
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況