- 1 名前:デフォルトの名無しさん mailto:sage [2018/09/22(土) 11:53:21.38 ID:BBiLRgnj0.net]
- !extend:on:vvvvv:1000:512
!extend:on:vvvvv:1000:512 シェルスクリプトに関する総合スレッドです。 スレ立て時は以下の文を先頭行に加えて下さい。 後のつけ忘れ防止の為に複数行重ねて追加推奨 !extend:on:vvvvv:1000:512 全般 ・荒しは無視しましょう。 ・丁寧な姿勢を心掛けましょう。 ・ネチケット(死語)を意識しましょう。 前スレ シェルスクリプト総合 その28 mevius.5ch.net/test/read.cgi/tech/1532397676/ VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
- 857 名前:デフォルトの名無しさん mailto:sage [2018/12/23(日) 16:57:53.53 ID:snCJQSVKM.net]
- awkやsedより遅いの?違うでしょ?日本語勉強しなよ。
- 858 名前:デフォルトの名無しさん mailto:sage [2018/12/23(日) 17:02:15.89 ID:yUjQiXy10.net]
- bashだけでやるより遅いって話をしてる所に
awkやsedよりも早いって言うことに意味がないと言ってる
- 859 名前:デフォルトの名無しさん mailto:sage [2018/12/23(日) 17:12:57.88 ID:jos3UrGDa.net]
- まーた始まったよ(パリポリ
- 860 名前:デフォルトの名無しさん mailto:sage [2018/12/23(日) 17:15:39.87 ID:YhyQsVDP0.net]
- )ソ)
ッλ ノ(.,ノ) (゙- ..::.::. . ( (ソ. .彡⌒ミ. )ソ) ).::'; (´・ω・`) ス ( ソ .::;';'(つ ⊂)::;';'`〜、. ( :;';' |__∧_| ::;';' ヽ) `'~`'''`'`'`~'~~`~~'`'`''''"`'`'`''`''''"`'``'~`''`'~`'''`'`'`~ さ あ 禿 げ 上 が っ て ま い り ま し た
- 861 名前:デフォルトの名無しさん mailto:sage [2018/12/23(日) 17:15:41.10 ID:yUjQiXy10.net]
- しーかたないねー(パリポリ
- 862 名前:デフォルトの名無しさん mailto:sage [2018/12/23(日) 17:46:37.96 ID:eD9rxy9Z0.net]
- あ?やんのかこら
- 863 名前:デフォルトの名無しさん mailto:sage [2018/12/23(日) 17:47:26.96 ID:GvU/LsqE0.net]
- >>857
質問者の意図を汲み取りましょうw
- 864 名前:デフォルトの名無しさん mailto:sage [2018/12/23(日) 20:07:54.91 ID:0+7qAFFh0.net]
- 今時汲み取り式なんて・・・
- 865 名前:デフォルトの名無しさん mailto:sage [2018/12/23(日) 20:36:12.95 ID:W0WvAA710.net]
- >>852
ほんと感謝します ようやくすっきりしました。 そのサイトにも行き着いていたのですが、ちゃんと読めていませんでした ありがとうございました。 >>853 trコマンドは知ってますし、今回も使いました。 今回の処理は結局、全処理c++で書き直したりもしてるんで、 他のツール使えばできるとかの情報は全く必要なく あくまでもbash単体で処理するにはどうするかということでここで質問しました bashでの正規表現に関する情報があまりなくて、 20年ほど前に買ったオライリーのbash本にも正規表現の記載が一切なく bashの正規表現に制限があるならそれを教えてもらうことも目的でここで聞きました。
- 866 名前:デフォルトの名無しさん mailto:sage [2018/12/26(水) 09:38:30.84 ID:GigxKnwz0.net]
- watchで表示更新時間ごとに変数の加算は出来ませんか?
- 867 名前:デフォルトの名無しさん mailto:sage [2018/12/26(水) 11:17:37.79 ID:SKc2oSlY0.net]
- 無理。自分でwatchを実装しろ
- 868 名前:デフォルトの名無しさん mailto:sage [2018/12/26(水) 11:19:29.41 ID:SKc2oSlY0.net]
- 訂正 自分でシェルスクリプト版watchを実装しろ
- 869 名前:デフォルトの名無しさん mailto:sage [2018/12/30(日) 08:42:00.02 ID:btIksil/0.net]
- 区切り文字を指定して文字列を分割するときに
区切り文字が一種類の場合は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
- 870 名前:デフォルトの名無しさん mailto:sage [2018/12/30(日) 10:20:55.12 ID:Ob5186rT0.net]
- >>869
入力形式が確定しているから単純化して sed 's/[-+:T]/ /g' とかはどう?
- 871 名前:デフォルトの名無しさん mailto:sage [2018/12/30(日) 10:23:20.84 ID:Ob5186rT0.net]
- >>870
書き込んでから気づいたがこれだと+の周りが処理できないな
- 872 名前:デフォルトの名無しさん [2018/12/30(日) 10:40:37.85 ID:btIksil/0.net]
- >>871
そうなんだよね…… もし+に特殊な処理をしないならば tr '-+:T' ' ' で一発なんだけど、できないんだよ。
- 873 名前:デフォルトの名無しさん mailto:sage [2018/12/30(日) 10:53:56.67 ID:MMB+AHvh0.net]
- sed 's/+/ + /;s/[-:T]/ /g'
では??
- 874 名前:デフォルトの名無しさん mailto:sage [2018/12/30(日) 11:01:57.94 ID:/wKH6dhf0.net]
- >>869
#!/bin/sh t="2018-12-30T08:36:50+09:00" IFS="-T:+" set -- $t echo $1 $2 $3 $4 $5 $6 + $7 $8
- 875 名前:デフォルトの名無しさん mailto:sage [2018/12/30(日) 11:08:31.89 ID:MMB+AHvh0.net]
- タイムゾーンはマイナスありか
- 876 名前:デフォルトの名無しさん mailto:sage [2018/12/30(日) 11:25:42.74 ID:MMB+AHvh0.net]
- sed 's/-/ /;s/-/ /;s/\([+-]\)/ \1 /;s/[:T]/ /g'
なんか泥臭いけど
- 877 名前:デフォルトの名無しさん mailto:sage [2018/12/30(日) 11:28:51.37 ID:/wKH6dhf0.net]
- #!/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
- 878 名前:デフォルトの名無しさん mailto:sage [2018/12/30(日) 11:32:49.36 ID:/wKH6dhf0.net]
- date -d "2018-12-30T08:36:50-09:00" "+%Y 略" (飽きた)
- 879 名前:デフォルトの名無しさん mailto:sage [2018/12/30(日) 11:48:16.88 ID:btIksil/0.net]
- >>874
それだとアメリカとかのタイムゾーン-03:00に対応できなくね?
- 880 名前:879 mailto:sage [2018/12/30(日) 11:49:02.96 ID:btIksil/0.net]
- >>877
すまん。ちゃんと対応してくれてた。
- 881 名前:デフォルトの名無しさん mailto:sage [2018/12/30(日) 16:00:37.71 ID:yEx+bcWd0.net]
- GNU grep の場合
$ echo '2018-12-30T08:36:50+09:00' | grep -Po '([0-9]{2,4}|(?<=:[0-9]{2})(\+|-))' | xargs
- 882 名前:デフォルトの名無しさん mailto:sage [2018/12/30(日) 16:49:11.50 ID:btIksil/0.net]
- >>881
すげー。 でも後から自分でデバッグできなさそうなのでやめておくw
- 883 名前:デフォルトの名無しさん mailto:sage [2018/12/30(日) 18:51:33.10 ID:iF2NHAVN0.net]
- 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}"
- 884 名前:デフォルトの名無しさん mailto:sage [2019/01/01(火) 13:16:40.82 ID:0CXB5czV0.net]
- :digit:より0-9のほうが打件数少ないのはなんなんだ
- 885 名前:デフォルトの名無しさん mailto:sage [2019/01/01(火) 13:57:25.01 ID:WRhsD0vEa.net]
- 単に意味を優先した表現方法があるだけやろ
- 886 名前:デフォルトの名無しさん mailto:sage [2019/01/05(土) 11:12:13.83 ID:dE0KuiGH0.net]
- 本当に一部のシステムでの話だけど
[:digit:]がロケールの数値表現にも合致する場合がある 「1」とか。
- 887 名前:デフォルトの名無しさん mailto:sage [2019/01/07(月) 14:59:50.50 ID:01rSRjtda.net]
- test.txtの内容が
hoge fuga puge で、 sed -i -e s/hoge\n// test.txt とやったのに『hoge(改行コード)』が消えてくれないたすけて test.txtの一行目を削除 → 2行目が一行目に、 みたいにトコロテンしたい
- 888 名前:デフォルトの名無しさん mailto:sage [2019/01/07(月) 15:08:57.37 ID:01rSRjtda.net]
- 自己解決・・・
sed -i -e ':a;N;$!ba;s/hoge\n//' test.txt ってやったらできました・・何この呪文。。
- 889 名前:デフォルトの名無しさん mailto:sage [2019/01/07(月) 15:30:19.88 ID:RynyI9pj0.net]
- sed -i -e '/hoge/d' test.txt じゃダメなん?
- 890 名前:デフォルトの名無しさん mailto:sage [2019/01/07(月) 15:36:38.32 ID:01rSRjtda.net]
- >>889
で、できました それ使っていきます ありがとうございました
- 891 名前:デフォルトの名無しさん [2019/01/07(月) 19:03:53.04 ID:fnTlHl64a.net]
- grep -v もよろしく
- 892 名前:デフォルトの名無しさん mailto:sage [2019/01/07(月) 19:52:44.45 ID:fRqqYmWxa.net]
- 一行目を消したいのかhogeを消したいのか
- 893 名前:デフォルトの名無しさん mailto:sage [2019/01/07(月) 19:54:56.69 ID:52D4hsE60.net]
- 全部消したい。何もかも
- 894 名前:デフォルトの名無しさん mailto:sage [2019/01/07(月) 20:31:04.88 ID:Opohu4pM0.net]
- 要らない
何も 消してしまおう
- 895 名前:デフォルトの名無しさん [2019/01/08(火) 09:33:22.38 ID:LJT6VvGba.net]
- そんなあなたに rm
- 896 名前:デフォルトの名無しさん mailto:sage [2019/01/10(木) 04:57:31.17 ID:yVo/NDAD0.net]
- ネットワーク通信(特にhttpクライアント)に関するコマンドって
大きくwgetとcurlとfetchなんかがあるけどもみんなはなに使ってます? 大抵のLinuxにはwgetが、MacとWindowsにはcurlが初期搭載されてるので そのどっちかだとは思う。
- 897 名前:デフォルトの名無しさん mailto:sage [2019/01/10(木) 09:31:04.31 ID:d7ZwxpvN0.net]
- スクリプトの場合はオプションが面倒くさくいのは関係ないから
個人的には自由度の高いcurl一択かな 直接コマンド打ってダウンロードするときはaria2cを使ったりする
- 898 名前:デフォルトの名無しさん [2019/01/10(木) 10:00:22.11 ID:jQehovm3a.net]
- 昔から使ったていたというだけの理由で wget
- 899 名前:デフォルトの名無しさん mailto:sage [2019/01/10(木) 11:40:29.86 ID:DS8wsvUQ0.net]
- wgetが入っていればwget、curlが入っていればcurl
両方入っているなら、ファイルにしたいときはwget、出力結果を見たいときはcurl
- 900 名前:デフォルトの名無しさん mailto:sage [2019/01/10(木) 16:56:41.32 ID:jhx89QXs0.net]
- PowerShell では、Invoke-WebRequest のalias が、curl, wget
get-alias (gal) で表示できる
- 901 名前:デフォルトの名無しさん mailto:sage [2019/01/10(木) 18:31:34.76 ID:yVo/NDAD0.net]
- >>900
え、それつまり $ curl ... としたときのオプションは実はcurlのじゃなくて Invoke-WebRequestに向けたオプションってこと? そんなに互換性があるオプション体系だとは思わないのだけど なぜエイリアスにしてあるんだろう……。
- 902 名前:デフォルトの名無しさん mailto:sage [2019/01/10(木) 20:31:11.75 ID:UUY7OixDM.net]
- 呼ばれたときの名前によって処理を切り替えてるんじゃないの?知らんけど
- 903 名前:デフォルトの名無しさん mailto:sage [2019/01/10(木) 22:34:40.34 ID:qJAnpZ0RM.net]
- cURL以外使わん
- 904 名前:デフォルトの名無しさん mailto:sage [2019/01/11(金) 03:35:07.12 ID:tAdCcMWb0.net]
- bashで「=」という文字をコマンドにすることってできますかね。
「=」を「bc -l <<<」に割り当てて $ = '4 / 5.1' みたいな簡易電卓として使いたいなと思ったんだけど alias =='bc -l <<<'やfunction = { bc -l <<< "$1" }はダメ……。 一応GNU Bashの「コマンドに使っていい文字」ではあるんだけど、使えない
- 905 名前:デフォルトの名無しさん mailto:sage [2019/01/11(金) 05:36:31.36 ID:YPYEBq870.net]
- =というファイル名のシェルスクリプト書いたら?
bashもいらんし #!/bin/sh echo "$@" | bc -l
- 906 名前:デフォルトの名無しさん mailto:sage [2019/01/11(金) 08:51:55.60 ID:EZ88NWNa0.net]
- function = { bc -l <<< "$1"; } ってすればできる(セミコロンが必要)
|

|