!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
探検
シェルスクリプト総合 その29
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ 3efb-m2E0)
2018/09/22(土) 11:53:21.38ID:BBiLRgnj0779デフォルトの名無しさん (オッペケ Sr3b-xhs3)
2018/12/01(土) 12:34:48.97ID:U3mK8vlPr さほど盛り上がっとらんやろw
人と関われよw
人と関われよw
780デフォルトの名無しさん (ワッチョイ 9a1d-C0zt)
2018/12/02(日) 02:44:47.66ID:+c90NOTB0 まあ 使える言語は多いほうが手広いわな
781デフォルトの名無しさん (オッペケ Sr3b-OA46)
2018/12/02(日) 17:31:01.53ID:OYZHkh2Or782デフォルトの名無しさん (ワッチョイ 76e7-97PR)
2018/12/02(日) 18:30:06.74ID:RWr+AACs0 自由に安くやってが最も困る。
783デフォルトの名無しさん (ワッチョイ db64-VZvV)
2018/12/04(火) 18:22:49.34ID:VVlGsdy50 find(1)ユーティリティの速度に関しての疑問なんだけど
https://linuxjm.osdn.jp/html/GNU_findutils/man1/find.1.html#lbAO
ここに
「検査 -name を -type の前に置いているのは、すべてのファイルに対して stat(2) システムコールを行う無駄を省くためである。」
とある。これは「find(1)は-nameのほうが-typeより処理速度が速い」ということを言っているよね。
実のところ手元ではfindが優秀すぎるのか知らんが-nameを-typeより前に書いても後に書いても速度に変化はなかった。
が 基本的にはfindで複数の条件を指定するときは-nameを先頭あたりに置いたほうがいいのかな。
findのソースコードを見てないので推測になるが-permや-newerもstat(2)を実行してるぽいので-nameより遅い筈。
https://linuxjm.osdn.jp/html/GNU_findutils/man1/find.1.html#lbAO
ここに
「検査 -name を -type の前に置いているのは、すべてのファイルに対して stat(2) システムコールを行う無駄を省くためである。」
とある。これは「find(1)は-nameのほうが-typeより処理速度が速い」ということを言っているよね。
実のところ手元ではfindが優秀すぎるのか知らんが-nameを-typeより前に書いても後に書いても速度に変化はなかった。
が 基本的にはfindで複数の条件を指定するときは-nameを先頭あたりに置いたほうがいいのかな。
findのソースコードを見てないので推測になるが-permや-newerもstat(2)を実行してるぽいので-nameより遅い筈。
784デフォルトの名無しさん (ワッチョイ 83b3-C+j/)
2018/12/04(火) 18:56:51.46ID:bTQB60BC0 statが遅いと言うのも幻想
785デフォルトの名無しさん (ブーイモ MMba-X2R9)
2018/12/04(火) 19:07:42.58ID:HBlgjyZNM 最近のファイルシステムはreaddirでタイプが取得できるよ
786デフォルトの名無しさん (ワッチョイ 938a-+wPc)
2018/12/06(木) 00:12:43.36ID:pQ33EIUW0 >>783
http://linuxjm.osdn.jp/html/GNU_findutils/man1/find.1.html#lbAE
-Olevel
1
これはデフォルトの最適化レベルであり、伝統的な動作に当たる。 式を並べ替えるとき、ファイル名にのみ基づいた検査 (たとえば、 -name や -regex) が先に実行されるようにする。
http://linuxjm.osdn.jp/html/GNU_findutils/man1/find.1.html#lbAE
-Olevel
1
これはデフォルトの最適化レベルであり、伝統的な動作に当たる。 式を並べ替えるとき、ファイル名にのみ基づいた検査 (たとえば、 -name や -regex) が先に実行されるようにする。
787デフォルトの名無しさん (ワッチョイ 9164-5svG)
2018/12/06(木) 09:10:09.33ID:cC0kDT7D0788デフォルトの名無しさん (ワッチョイ 9164-5svG)
2018/12/06(木) 15:10:37.27ID:cC0kDT7D0 引数に一律にコマンドで操作を施したあと、それらをもう一度引数として扱うにはどうすればいいかな
$ a.sh arg1 arg2 arg3
みたいに起動されたとして$1,2,3にはarg1,2,3が入ってる。
これを$(echo $1 | tr '[:lower:]' '[:upper:]')みたいなコマンド置換を使ってARG1,2,3みたいに変形させる。
問題はこの後にa.shの中の別のコマンドに
somecmd "$@"
のような形でARG1,2,3を与えたいってこと。
while [ $# -eq 0 ]とshiftを使う普通のやりかたではループを抜けた後に$@が空になってしまう。
どうにかして引数の構造を維持したいんだけども……。
$ a.sh arg1 arg2 arg3
みたいに起動されたとして$1,2,3にはarg1,2,3が入ってる。
これを$(echo $1 | tr '[:lower:]' '[:upper:]')みたいなコマンド置換を使ってARG1,2,3みたいに変形させる。
問題はこの後にa.shの中の別のコマンドに
somecmd "$@"
のような形でARG1,2,3を与えたいってこと。
while [ $# -eq 0 ]とshiftを使う普通のやりかたではループを抜けた後に$@が空になってしまう。
どうにかして引数の構造を維持したいんだけども……。
789デフォルトの名無しさん (ワッチョイ e1e1-eDAb)
2018/12/06(木) 16:06:47.11ID:59uVculK0 >>788
eval set -- $(printf ' "$(printf "%%s" "$%d" | tr "[:lower:]" "[:upper:]")"' $(seq $#))
eval set -- $(printf ' "$(printf "%%s" "$%d" | tr "[:lower:]" "[:upper:]")"' $(seq $#))
790デフォルトの名無しさん (ワッチョイ 9164-5svG)
2018/12/06(木) 16:38:57.36ID:cC0kDT7D0 >>789
ありがとう。
ありがとう。
791デフォルトの名無しさん (ワッチョイ e19b-IYXC)
2018/12/12(水) 21:07:46.42ID:7+bnD1C/0 ここかどうかわからんのだけど、メールの添付ファイルのテキストCSV部分を切り出してDB格納しようと思ったら、
シェルスクリプトでヘッダから切り出すしかない?
シェルスクリプトでヘッダから切り出すしかない?
792デフォルトの名無しさん (ワッチョイ 5b76-3SjK)
2018/12/12(水) 21:36:28.16ID:xr4it+i10 そういう専用ツールがないんだったらそうだろうな
793デフォルトの名無しさん (ワッチョイ f398-2dqZ)
2018/12/13(木) 19:34:10.52ID:Nc8J2Ufn0 >>550
別件でググっていたら、言及しているドキュメント見つけた
${1+"$@"} で動かないシェルもあるようだ
http://web.sfc.wide.ad.jp/~sagawa/gnujdoc/autoconf-2.59/autoconf-ja_10.html
> 最も有名なシェルの移植性の問題の一つは,`"$@"'との関連です.位置に 依存する引数が無いとき,
> POSIXでは`"$@"'を何もないことと 等価になっていますが,オリジナルのUnixバージョン7の
> Bourneシェルはその代 わりに`""'として扱い,この動作はDigital Unix 5.0のようにそれ以降の 実装でも提供されています.
>
> この移植性の問題を回避する伝統的な方法は,`${1+"$@"}'を使用する ことです.
> 残念ながら,この手法はMac OS Xでも使用されている,Zsh (3.x と 4.x)では動作しません.
> Bourneシェルをエミュレートしているとき,Zshは `${1+"$@"}'で単語の分離を実行します.
別件でググっていたら、言及しているドキュメント見つけた
${1+"$@"} で動かないシェルもあるようだ
http://web.sfc.wide.ad.jp/~sagawa/gnujdoc/autoconf-2.59/autoconf-ja_10.html
> 最も有名なシェルの移植性の問題の一つは,`"$@"'との関連です.位置に 依存する引数が無いとき,
> POSIXでは`"$@"'を何もないことと 等価になっていますが,オリジナルのUnixバージョン7の
> Bourneシェルはその代 わりに`""'として扱い,この動作はDigital Unix 5.0のようにそれ以降の 実装でも提供されています.
>
> この移植性の問題を回避する伝統的な方法は,`${1+"$@"}'を使用する ことです.
> 残念ながら,この手法はMac OS Xでも使用されている,Zsh (3.x と 4.x)では動作しません.
> Bourneシェルをエミュレートしているとき,Zshは `${1+"$@"}'で単語の分離を実行します.
794デフォルトの名無しさん (ワッチョイ 2364-kyah)
2018/12/16(日) 07:48:44.86ID:AoQUSXZn0 Bashってシングルクォートの内部でない限りバックスラッシュでシングルクオートを直接エスケープできるんだな。
マニュアルにも書いてないけど他人のスクリプト見て発見した。
$ squo=\'
$ echo $squo
'
↑こうできる。Bashは楽でいいなぁ
マニュアルにも書いてないけど他人のスクリプト見て発見した。
$ squo=\'
$ echo $squo
'
↑こうできる。Bashは楽でいいなぁ
795デフォルトの名無しさん (ワッチョイ 2b23-Ufcq)
2018/12/16(日) 09:07:44.57ID:rkLF3tWt0 >>794
水を差すようで悪いがposixで規定されているから他のシェルでも同じになる
水を差すようで悪いがposixで規定されているから他のシェルでも同じになる
796デフォルトの名無しさん (アウアウカー Sa6b-+gtp)
2018/12/16(日) 09:55:51.26ID:0jv0YmXXa なぜそれを特別に思ったのかわからんけど他は出来なかったりするの?
797デフォルトの名無しさん (アウアウウー Sa4f-mTCp)
2018/12/17(月) 19:35:33.43ID:41bJ0tdVa \ はエスケープだし使う事はあるので特に目新しい感じはしない。
sambaでファイルサーバ作ってWindowsからもファイルが書かれるような状況だとファイル名にスペースだの括弧だの普通に入れられてLinuxでログインしている端末からだとエスケープせざるを得なかったりする。
俺の場合はそれで一文字だけエスケープはよく使う。
sambaでファイルサーバ作ってWindowsからもファイルが書かれるような状況だとファイル名にスペースだの括弧だの普通に入れられてLinuxでログインしている端末からだとエスケープせざるを得なかったりする。
俺の場合はそれで一文字だけエスケープはよく使う。
798デフォルトの名無しさん (ワッチョイ 1e98-2dqZ)
2018/12/17(月) 21:17:48.10ID:lO+98ZHR0 Linuxで普通にファイル名にスペース入れられるんだから
sambaとかwindowsは全く関係ないけどね
sambaとかwindowsは全く関係ないけどね
799デフォルトの名無しさん (ワッチョイ 8376-2T4x)
2018/12/17(月) 23:45:58.91ID:LS1nUj7m0 CUI使いとGUI使いの違いだな
CUIでわざわざくそめんどくさいスペースなんぞを好き好んでは使わない。GUIではふつーにわかりやすくもなるから使う、普通に入れるのはあたりまえ
CUIでわざわざくそめんどくさいスペースなんぞを好き好んでは使わない。GUIではふつーにわかりやすくもなるから使う、普通に入れるのはあたりまえ
800デフォルトの名無しさん (ワッチョイ af03-Gl1U)
2018/12/17(月) 23:52:42.27ID:oCmK2PVR0 めんどくさくないけど?エアプなんキミ?
801デフォルトの名無しさん (ワッチョイ 2b1d-UKyl)
2018/12/17(月) 23:54:51.53ID:faSovs330 有志のコードに
ファイル名が空白入りだと事故るものがあったような?
自分は
安全とって全部アンダーバー変換しておく
ファイル名が空白入りだと事故るものがあったような?
自分は
安全とって全部アンダーバー変換しておく
802デフォルトの名無しさん (ワッチョイ 8376-2T4x)
2018/12/18(火) 00:10:28.35ID:DLVg/wUV0 >>800
めんどくさいめんどくさくないはまあ人次第だけどな
CUIでなんやかんやキーボード打ってる時に、エスケープしたり"や'囲ったり、そもそもスペースはもろもろコマンドでデリミッターだったりで、めんどくさいと思うけどな
人次第ではあるが、そゆのが想像できなずにエアプと言えるのがエアプっぽいと思わなくもない
めんどくさいめんどくさくないはまあ人次第だけどな
CUIでなんやかんやキーボード打ってる時に、エスケープしたり"や'囲ったり、そもそもスペースはもろもろコマンドでデリミッターだったりで、めんどくさいと思うけどな
人次第ではあるが、そゆのが想像できなずにエアプと言えるのがエアプっぽいと思わなくもない
803デフォルトの名無しさん (ワッチョイ 8b8a-j0aa)
2018/12/18(火) 01:24:02.71ID:2j/3pVMu0 >>801
有志って言ってもタダの素人だっただけの話じゃん
有志って言ってもタダの素人だっただけの話じゃん
804デフォルトの名無しさん (ワッチョイ 069f-ez/E)
2018/12/18(火) 03:02:35.05ID:HuP+yDtL0 >>798
もちろんファイル名には / 以外は何でもありだが Linux だけ使ってると普通はあまりそういうファイル作らないじゃない。一々エスケープしなきゃならないしシェルスクリプトで扱いづらいし。
まあ趣味の問題ではあるけどな。
もちろんファイル名には / 以外は何でもありだが Linux だけ使ってると普通はあまりそういうファイル作らないじゃない。一々エスケープしなきゃならないしシェルスクリプトで扱いづらいし。
まあ趣味の問題ではあるけどな。
805デフォルトの名無しさん (ワッチョイ 1e98-2dqZ)
2018/12/18(火) 03:52:25.12ID:aYYQx5Ta0 libreofficeから「報告書 2018-12-18」という名前で保存することの何が面倒なのか?
806デフォルトの名無しさん (ワッチョイ 3b9b-W8uN)
2018/12/18(火) 05:00:11.76ID:CtnsxEVc0 うわあ
807デフォルトの名無しさん (ワッチョイ 1e98-2dqZ)
2018/12/18(火) 05:48:13.89ID:aYYQx5Ta0 ファイル名にスペースが使えるOSが悪いんだって言いたいのかな?w
808デフォルトの名無しさん (ワッチョイ af03-PsFA)
2018/12/18(火) 06:17:30.36ID:mQMHvFDr0809デフォルトの名無しさん (アウアウウー Sa4f-mTCp)
2018/12/18(火) 09:37:03.21ID:92SsvGE7a >>805
ああ。WindowsみたいにGUIメインで使ってるの?それだけだったら面倒じゃないかもね。
ああ。WindowsみたいにGUIメインで使ってるの?それだけだったら面倒じゃないかもね。
810デフォルトの名無しさん (ワッチョイ 4676-2T4x)
2018/12/18(火) 10:24:35.01ID:H+ovSSRq0 >>808
なにをいいたいのかイミフすぎだな、プロフェッショナルwすぎて
補完時にもバックスラッシュ打たなきゃならんだろ?打たなくていい環境なの?そういう環境もあるんだよ
なんかただ馬鹿にしたいだけのお人か?しょうもない
なにをいいたいのかイミフすぎだな、プロフェッショナルwすぎて
補完時にもバックスラッシュ打たなきゃならんだろ?打たなくていい環境なの?そういう環境もあるんだよ
なんかただ馬鹿にしたいだけのお人か?しょうもない
811デフォルトの名無しさん (アウアウカー Sa6b-+gtp)
2018/12/18(火) 12:13:46.40ID:bhmdNwABa なんで自分以外みんな非効率って思ってるのここの人たち
最強は俺だから落ち着けよ
最強は俺だから落ち着けよ
812デフォルトの名無しさん (アウアウウー Sa4f-mTCp)
2018/12/18(火) 12:15:53.17ID:92SsvGE7a Tabキー押すと自動で保管したり変換したりしてくれる場合は楽かも。
楽ってだけで見た目エスケープだらけの見辛い状態にはなるが。
楽ってだけで見た目エスケープだらけの見辛い状態にはなるが。
813デフォルトの名無しさん (オッペケ Sra3-Gl1U)
2018/12/18(火) 12:25:17.53ID:Lulkb9OFr >>810
はいはいエアプさんはそろそろお昼寝の時間でちゅよ〜w
はいはいエアプさんはそろそろお昼寝の時間でちゅよ〜w
814デフォルトの名無しさん (ワッチョイ 4676-2T4x)
2018/12/18(火) 15:34:29.41ID:kLOm0zeN0 アホすぎなレスで笑うww
815デフォルトの名無しさん (ワッチョイ 9f98-2dqZ)
2018/12/18(火) 15:42:44.01ID:DOEC5j1K0 こいつらプログラム言語はシェルスクリプトしか使ったこと無いんか?
シェルスクリプトは珍しく引数の文字列をクォート(もしくはダブルクォート)で
くくるのが必須じゃない言語だが他の言語は殆どクォートでくくるんだぞ
"foobar" も "foo bar" も入力のしやすさに大差ないだろ
エスケープが必要なのは \ 等であってスペースはエスケープ不要なごく普通の文字なんだが
いつものことだが(シェルスクリプト以外の)経験の差を感じるよな
シェルスクリプトは珍しく引数の文字列をクォート(もしくはダブルクォート)で
くくるのが必須じゃない言語だが他の言語は殆どクォートでくくるんだぞ
"foobar" も "foo bar" も入力のしやすさに大差ないだろ
エスケープが必要なのは \ 等であってスペースはエスケープ不要なごく普通の文字なんだが
いつものことだが(シェルスクリプト以外の)経験の差を感じるよな
816デフォルトの名無しさん (ワッチョイ 4676-2T4x)
2018/12/18(火) 16:01:13.36ID:kLOm0zeN0 何をお怒りか存じませんが、括らなくてもいいから括らないのが普通になるんでございますよ。当然括るのが必須なら括るのが普通。シェルスクリプトでもスクリプトファイル書くときは変数展開では普通に括るし
コマンド叩くときにはいつも括ってるの??
コマンド叩くときにはいつも括ってるの??
817デフォルトの名無しさん (ワッチョイ 4676-2T4x)
2018/12/18(火) 16:03:24.94ID:kLOm0zeN0 >スクリプトファイル書くときは
ああ、ワンライナーなんぞでもだな。ここんとこ間違い/不要
ああ、ワンライナーなんぞでもだな。ここんとこ間違い/不要
818デフォルトの名無しさん (ワッチョイ 9f98-2dqZ)
2018/12/18(火) 16:21:43.27ID:DOEC5j1K0819デフォルトの名無しさん (ワッチョイ 4676-2T4x)
2018/12/18(火) 16:24:38.45ID:kLOm0zeN0820デフォルトの名無しさん (ワッチョイ 9f98-2dqZ)
2018/12/18(火) 16:28:29.69ID:DOEC5j1K0821デフォルトの名無しさん (ワッチョイ 4676-2T4x)
2018/12/18(火) 16:33:56.90ID:kLOm0zeN0822デフォルトの名無しさん (ワッチョイ 9f98-2dqZ)
2018/12/18(火) 16:56:33.71ID:DOEC5j1K0 アホすぎなレスで笑うww
823デフォルトの名無しさん (アウアウウー Sa4f-mTCp)
2018/12/18(火) 17:14:23.03ID:92SsvGE7a WindowsだとC言語とかでパスの区切りが \ になってて毎回 \\ と入れなきゃいけないのも面倒だな。
実は / でも大丈夫だったりはするが。
実は / でも大丈夫だったりはするが。
824デフォルトの名無しさん (ワッチョイ 1e81-wsuD)
2018/12/18(火) 17:18:15.10ID:1JLRyxNd0 今はパスにスペース入れるのも普通だし、対応もできるけど
トラブルのもとは根絶したいから、自分は使わない、それだけ
トラブルのもとは根絶したいから、自分は使わない、それだけ
825デフォルトの名無しさん (ワッチョイ 4676-2T4x)
2018/12/18(火) 17:24:06.70ID:kLOm0zeN0 >>822
ww ざんねんなこって。いろいろとw
ww ざんねんなこって。いろいろとw
826デフォルトの名無しさん (ワッチョイ 1e81-wsuD)
2018/12/18(火) 17:31:06.24ID:1JLRyxNd0 パスをコマンドの引数にする必要がある場合、
例えば、hogecommand --foo_option="filepath=[パス],otheroption=bar" なんていうのがある時、
パスにスペースが入っていると、コマンド自体がパースするときに一工夫がいる。
シングルクォートが使えるシェルならいいが、Windowsのように使えないものもあるから、
バックスラッシュなどでエスケープしたり、コマンドが以下の様な別の区切り文字を用意していたりする。
--foo_option=[filepath="/path/with space/",otheroption=bar]
対処方法がなかなか見つからないこともあり、面倒くさいので、
自分からすすんでスペースを入れようとは思わない。
例えば、hogecommand --foo_option="filepath=[パス],otheroption=bar" なんていうのがある時、
パスにスペースが入っていると、コマンド自体がパースするときに一工夫がいる。
シングルクォートが使えるシェルならいいが、Windowsのように使えないものもあるから、
バックスラッシュなどでエスケープしたり、コマンドが以下の様な別の区切り文字を用意していたりする。
--foo_option=[filepath="/path/with space/",otheroption=bar]
対処方法がなかなか見つからないこともあり、面倒くさいので、
自分からすすんでスペースを入れようとは思わない。
827デフォルトの名無しさん (ワッチョイ 9f98-2dqZ)
2018/12/18(火) 17:46:09.05ID:DOEC5j1K0 × パスにスペースが入っていると、コマンド自体がパースするときに一工夫がいる。
○ コマンドの引数の形式を適当に決めると、パースするときに一工夫がいるようになってしまう。
○ コマンドの引数の形式を適当に決めると、パースするときに一工夫がいるようになってしまう。
828デフォルトの名無しさん (ワッチョイ 9f98-2dqZ)
2018/12/18(火) 17:50:36.86ID:DOEC5j1K0 ちなみに気づいていないようだから言うと
>>826はパスにスペースが入っていると困る問題ではない
hogecommand --foo_option="filepath=/path/with space/,otheroption=bar"
,でsplitして、○○=を消せばいいだけだから何も困らない
この例で困るのは、パスにカンマが含まれている場合であって
スペースではない
>>826はパスにスペースが入っていると困る問題ではない
hogecommand --foo_option="filepath=/path/with space/,otheroption=bar"
,でsplitして、○○=を消せばいいだけだから何も困らない
この例で困るのは、パスにカンマが含まれている場合であって
スペースではない
829デフォルトの名無しさん (ワッチョイ 1e81-wsuD)
2018/12/18(火) 18:16:22.51ID:1JLRyxNd0 >>828
ああ、わるい、オプションの階層が一段階足らなかった。
hogeコマンドが、別のライブラリ(foo)のオプションを呼ぶような場合に、
hogecommand --hoge_option=foo_option="filepath=[パス],otheroption=bar"
hogecommand --hoge_option "--foo_option filepath=[パス],otheroption=bar"
こんなパターンがあって、そのままではやはりパースに一工夫が必要で面倒くさい。
ちなみに、上はmpv、下はyoutube-dlで使われている。
ああ、わるい、オプションの階層が一段階足らなかった。
hogeコマンドが、別のライブラリ(foo)のオプションを呼ぶような場合に、
hogecommand --hoge_option=foo_option="filepath=[パス],otheroption=bar"
hogecommand --hoge_option "--foo_option filepath=[パス],otheroption=bar"
こんなパターンがあって、そのままではやはりパースに一工夫が必要で面倒くさい。
ちなみに、上はmpv、下はyoutube-dlで使われている。
830デフォルトの名無しさん (ワッチョイ 9f98-2dqZ)
2018/12/18(火) 18:19:12.99ID:DOEC5j1K0 別のコマンドを呼び出すなら、別のコマンドにそのまま渡せばよかろう?
hogecommand --foo_option="どんな内容でも"
betsucommand どんな内容でも
はい。おしまい
hogecommand --foo_option="どんな内容でも"
betsucommand どんな内容でも
はい。おしまい
831デフォルトの名無しさん (ワッチョイ 2364-kyah)
2018/12/18(火) 18:24:29.26ID:n1+CJQ+h0 ちなみにファイル名により柔軟なのはWindowsよりも寧ろLinux(というかUnix系)だぞ。
Windowsは「con」とか「aux」とかも駄目だしバックスラッシュやコロンが含まれても駄目。
Unix系のOSは「\0(空文字)」と「/(スラッシュ)」だけが不適合で,あとは全ての文字をファイル名として
使用できる。
Windowsは「con」とか「aux」とかも駄目だしバックスラッシュやコロンが含まれても駄目。
Unix系のOSは「\0(空文字)」と「/(スラッシュ)」だけが不適合で,あとは全ての文字をファイル名として
使用できる。
832デフォルトの名無しさん (ワッチョイ 2b1d-UKyl)
2018/12/18(火) 18:35:11.65ID:/rMHixhE0 開業コードもつかえるのはまれにネタになる
833デフォルトの名無しさん (ワッチョイ 8b8a-j0aa)
2018/12/18(火) 22:33:16.76ID:2j/3pVMu0 >>810
今時はWindowsのコマンドプロンプトだって必要に応じてエスケープしてくれるぞ?
今時はWindowsのコマンドプロンプトだって必要に応じてエスケープしてくれるぞ?
834デフォルトの名無しさん (ワッチョイ 8b8a-j0aa)
2018/12/18(火) 22:34:34.10ID:2j/3pVMu0835デフォルトの名無しさん (JP 0H8b-O0Yg)
2018/12/18(火) 22:57:59.19ID:uKKjGArEH >>834
消す前に作れねーだろ
消す前に作れねーだろ
836デフォルトの名無しさん (ワッチョイ af03-Gl1U)
2018/12/18(火) 22:59:29.33ID:mQMHvFDr0 消せるわこのエアプw
837デフォルトの名無しさん (ワッチョイ 2364-kyah)
2018/12/18(火) 23:44:21.87ID:n1+CJQ+h0 名前に\0を含むファイルは作れないと思うけど。
少なくともPOSIXでは禁止されているし,http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap03.html#tag_03_170
ext4でも作成できない。
……「エアプ」はどっちだろう。
少なくともPOSIXでは禁止されているし,http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap03.html#tag_03_170
ext4でも作成できない。
……「エアプ」はどっちだろう。
838デフォルトの名無しさん (ワッチョイ 9f98-2dqZ)
2018/12/18(火) 23:56:48.31ID:DOEC5j1K0 正直ファイル名に\0が使えようが使えまいが
シェルスクリプトで\0が扱えないのでどうでもいい
シェルスクリプトで\0が扱えないのでどうでもいい
839デフォルトの名無しさん (ワッチョイ 469f-3Kg9)
2018/12/19(水) 04:45:08.43ID:gf1Tua9E0 エアプってなんなん?
840デフォルトの名無しさん (ブーイモ MM47-LjuL)
2018/12/19(水) 07:27:20.06ID:+7lasSiAM ¥x00
841デフォルトの名無しさん (オッペケ Sra3-Gl1U)
2018/12/19(水) 12:42:42.59ID:guVdMf63r >>839
おまえらの事やんw
おまえらの事やんw
842デフォルトの名無しさん (ワッチョイ 9b9f-q1e7)
2018/12/20(木) 00:17:43.13ID:6pIAvd2J0 Airぷ
843デフォルトの名無しさん (ブーイモ MMeb-6EUo)
2018/12/20(木) 00:39:10.52ID:0M5ZFUn5M for i in {0..255}; do touch "./hoge$(printf "\x$(printf "%02x" $i)")foo"; done
844デフォルトの名無しさん (ワッチョイ 2323-OVaG)
2018/12/22(土) 13:28:39.38ID:t1Sp89dZ0 エロ動画サーフィンで広告サイトが開いてしまったら、
デスクトップのシェルスクリプトにドラッグアンドドロップすることで
そのサイトのIPアドレスをHOSTSファイルに追加する
デスクトップのシェルスクリプトにドラッグアンドドロップすることで
そのサイトのIPアドレスをHOSTSファイルに追加する
845デフォルトの名無しさん (ワッチョイ 7d98-5YD5)
2018/12/22(土) 13:59:19.13ID:aa5NQG9N0 なんていうことをしていたら、hostsファイルの行数が
数千行になってしまった
数千行になってしまった
846デフォルトの名無しさん (ワッチョイ 4b9e-5YD5)
2018/12/23(日) 08:08:03.20ID:W0WvAA710 sedだと簡単に動く一文字以上の半角スペースを一文字スペースに置換するコレ
echo "$strings" | sed -E 's/ {1,}/ /g'
bashだとどーしてもうまく動かず次のように[]で囲ってやるとなんとか全連続スペースじゃなく一部
だけが置換できた。
${strings// [ \{1,\}]/ }
それ以上どうしようもなかったので、次のような関数を作った
function Rep2One(){
local str=$1
local chr=$2
while :
do
str="${str//$chr$chr/$chr}"
if [[ ! $str =~ $chr$chr ]]; then
break
fi
done
echo "$str"
}
srings=`Rep2One "$strings" " "`
これで任意の2文字以上の連続を1文字に置換できたが、
sedみたいに一発でかっこよく記述できない?
至る所でbashからsedやgrep起動してたんだが、
bashのなかでできることはbashだけでやった方が大分速いことがわかったんで
なんとかbashの正規表現だけでやりたい
echo "$strings" | sed -E 's/ {1,}/ /g'
bashだとどーしてもうまく動かず次のように[]で囲ってやるとなんとか全連続スペースじゃなく一部
だけが置換できた。
${strings// [ \{1,\}]/ }
それ以上どうしようもなかったので、次のような関数を作った
function Rep2One(){
local str=$1
local chr=$2
while :
do
str="${str//$chr$chr/$chr}"
if [[ ! $str =~ $chr$chr ]]; then
break
fi
done
echo "$str"
}
srings=`Rep2One "$strings" " "`
これで任意の2文字以上の連続を1文字に置換できたが、
sedみたいに一発でかっこよく記述できない?
至る所でbashからsedやgrep起動してたんだが、
bashのなかでできることはbashだけでやった方が大分速いことがわかったんで
なんとかbashの正規表現だけでやりたい
847デフォルトの名無しさん (ワッチョイ 7d98-5YD5)
2018/12/23(日) 08:14:34.77ID:yUjQiXy10 なんでそんなに正規表現に拘るのかわからん
#!/bin/sh
while IFS= read -r line; do
echo $line
done
#!/bin/sh
while IFS= read -r line; do
echo $line
done
848デフォルトの名無しさん (ワッチョイ 4b9e-5YD5)
2018/12/23(日) 12:09:04.04ID:W0WvAA710849デフォルトの名無しさん (ワッチョイ 4b9e-5YD5)
2018/12/23(日) 12:13:13.41ID:W0WvAA710 結局、bashの正規表現は2文字以上全置換を記述できないんですかね?
bashの正規表現でわからないことがいろいろあるんですよ。
文頭置換したいとき'^'に相当するのはどう書くかとか?
bashの正規表現でわからないことがいろいろあるんですよ。
文頭置換したいとき'^'に相当するのはどう書くかとか?
850デフォルトの名無しさん (ワッチョイ 9b9f-q1e7)
2018/12/23(日) 13:58:44.05ID:nNQ759QC0851デフォルトの名無しさん (ワッチョイ 7d98-5YD5)
2018/12/23(日) 14:09:56.35ID:yUjQiXy10 >>848
IFSで指定しろ
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 にセット
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 にセット
853デフォルトの名無しさん (ワッチョイ 3564-Xnhl)
2018/12/23(日) 15:08:28.31ID:eEMSqKaq0854デフォルトの名無しさん (ワッチョイ 7d98-5YD5)
2018/12/23(日) 15:10:20.98ID:yUjQiXy10 外部コマンドを呼び出している以上
遅くなることに変わりはない
遅くなることに変わりはない
855デフォルトの名無しさん (ワッチョイ 3564-Xnhl)
2018/12/23(日) 16:10:20.07ID:eEMSqKaq0 「awkやsedを使う方法より」
856デフォルトの名無しさん (ワッチョイ 7d98-5YD5)
2018/12/23(日) 16:20:58.12ID:yUjQiXy10 「awkやsedを使う方法より若干高速
と言ったって外部コマンドを呼び出している以上
遅くなることに変わりはない」
と言ったって外部コマンドを呼び出している以上
遅くなることに変わりはない」
857デフォルトの名無しさん (アメ MM59-wUZI)
2018/12/23(日) 16:57:53.53ID:snCJQSVKM awkやsedより遅いの?違うでしょ?日本語勉強しなよ。
858デフォルトの名無しさん (ワッチョイ 7d98-5YD5)
2018/12/23(日) 17:02:15.89ID:yUjQiXy10 bashだけでやるより遅いって話をしてる所に
awkやsedよりも早いって言うことに意味がないと言ってる
awkやsedよりも早いって言うことに意味がないと言ってる
859デフォルトの名無しさん (アウアウカー Sa51-qjIk)
2018/12/23(日) 17:12:57.88ID:jos3UrGDa まーた始まったよ(パリポリ
860デフォルトの名無しさん (ワッチョイ 23b3-yIz5)
2018/12/23(日) 17:15:39.87ID:YhyQsVDP0 )ソ)
ッλ ノ(.,ノ)
(゙- ..::.::. . (
(ソ. .彡⌒ミ. )ソ)
).::'; (´・ω・`) ス (
ソ .::;';'(つ ⊂)::;';'`〜、.
( :;';' |__∧_| ::;';' ヽ)
`'~`'''`'`'`~'~~`~~'`'`''''"`'`'`''`''''"`'``'~`''`'~`'''`'`'`~
さ あ 禿 げ 上 が っ て ま い り ま し た
ッλ ノ(.,ノ)
(゙- ..::.::. . (
(ソ. .彡⌒ミ. )ソ)
).::'; (´・ω・`) ス (
ソ .::;';'(つ ⊂)::;';'`〜、.
( :;';' |__∧_| ::;';' ヽ)
`'~`'''`'`'`~'~~`~~'`'`''''"`'`'`''`''''"`'``'~`''`'~`'''`'`'`~
さ あ 禿 げ 上 が っ て ま い り ま し た
861デフォルトの名無しさん (ワッチョイ 7d98-5YD5)
2018/12/23(日) 17:15:41.10ID:yUjQiXy10 しーかたないねー(パリポリ
862デフォルトの名無しさん (ワッチョイ 2b92-kOkb)
2018/12/23(日) 17:46:37.96ID:eD9rxy9Z0 あ?やんのかこら
863デフォルトの名無しさん (ワッチョイ cdac-q4pV)
2018/12/23(日) 17:47:26.96ID:GvU/LsqE0 >>857
質問者の意図を汲み取りましょうw
質問者の意図を汲み取りましょうw
864デフォルトの名無しさん (ワッチョイ 4b8a-KS/H)
2018/12/23(日) 20:07:54.91ID:0+7qAFFh0 今時汲み取り式なんて・・・
865デフォルトの名無しさん (ワッチョイ 4b9e-5YD5)
2018/12/23(日) 20:36:12.95ID:W0WvAA710 >>852
ほんと感謝します
ようやくすっきりしました。
そのサイトにも行き着いていたのですが、ちゃんと読めていませんでした
ありがとうございました。
>>853
trコマンドは知ってますし、今回も使いました。
今回の処理は結局、全処理c++で書き直したりもしてるんで、
他のツール使えばできるとかの情報は全く必要なく
あくまでもbash単体で処理するにはどうするかということでここで質問しました
bashでの正規表現に関する情報があまりなくて、
20年ほど前に買ったオライリーのbash本にも正規表現の記載が一切なく
bashの正規表現に制限があるならそれを教えてもらうことも目的でここで聞きました。
ほんと感謝します
ようやくすっきりしました。
そのサイトにも行き着いていたのですが、ちゃんと読めていませんでした
ありがとうございました。
>>853
trコマンドは知ってますし、今回も使いました。
今回の処理は結局、全処理c++で書き直したりもしてるんで、
他のツール使えばできるとかの情報は全く必要なく
あくまでもbash単体で処理するにはどうするかということでここで質問しました
bashでの正規表現に関する情報があまりなくて、
20年ほど前に買ったオライリーのbash本にも正規表現の記載が一切なく
bashの正規表現に制限があるならそれを教えてもらうことも目的でここで聞きました。
866デフォルトの名無しさん (ワッチョイ 9be7-omPw)
2018/12/26(水) 09:38:30.84ID:GigxKnwz0 watchで表示更新時間ごとに変数の加算は出来ませんか?
867デフォルトの名無しさん (ワッチョイ 3598-5YD5)
2018/12/26(水) 11:17:37.79ID:SKc2oSlY0 無理。自分でwatchを実装しろ
868デフォルトの名無しさん (ワッチョイ 3598-5YD5)
2018/12/26(水) 11:19:29.41ID:SKc2oSlY0 訂正 自分でシェルスクリプト版watchを実装しろ
869デフォルトの名無しさん (ワッチョイ c6be-DhLY)
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
区切り文字が一種類の場合は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デフォルトの名無しさん (ワッチョイ 5523-ewg4)
2018/12/30(日) 10:20:55.12ID:Ob5186rT0871デフォルトの名無しさん (ワッチョイ 5523-ewg4)
2018/12/30(日) 10:23:20.84ID:Ob5186rT0 >>870
書き込んでから気づいたがこれだと+の周りが処理できないな
書き込んでから気づいたがこれだと+の周りが処理できないな
872デフォルトの名無しさん (ワッチョイ c6be-DhLY)
2018/12/30(日) 10:40:37.85ID:btIksil/0873デフォルトの名無しさん (ワッチョイ 1aa2-Iy/R)
2018/12/30(日) 10:53:56.67ID:MMB+AHvh0 sed 's/+/ + /;s/[-:T]/ /g'
では??
では??
874デフォルトの名無しさん (ワッチョイ 7598-4fyn)
2018/12/30(日) 11:01:57.94ID:/wKH6dhf0875デフォルトの名無しさん (ワッチョイ 1aa2-Iy/R)
2018/12/30(日) 11:08:31.89ID:MMB+AHvh0 タイムゾーンはマイナスありか
876デフォルトの名無しさん (ワッチョイ 1aa2-Iy/R)
2018/12/30(日) 11:25:42.74ID:MMB+AHvh0 sed 's/-/ /;s/-/ /;s/\([+-]\)/ \1 /;s/[:T]/ /g'
なんか泥臭いけど
なんか泥臭いけど
877デフォルトの名無しさん (ワッチョイ 7598-4fyn)
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
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デフォルトの名無しさん (ワッチョイ 7598-4fyn)
2018/12/30(日) 11:32:49.36ID:/wKH6dhf0 date -d "2018-12-30T08:36:50-09:00" "+%Y 略" (飽きた)
879デフォルトの名無しさん (ワッチョイ c628-DhLY)
2018/12/30(日) 11:48:16.88ID:btIksil/0 >>874
それだとアメリカとかのタイムゾーン-03:00に対応できなくね?
それだとアメリカとかのタイムゾーン-03:00に対応できなくね?
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 地方で深刻移動貧困の実態「車のために働いてる」手取り15万円のシンママ月3.2万円が軽自動車の維持費 [七波羅探題★]
- SNSを一触即発の“地雷原”に変えた「叩き活」の正体…推し活よりも“嫌いな相手を叩く”ことに快感を覚えるのはなぜか [おっさん友の会★]
- 「これらも違反として検挙しています」岡山県警の注意喚起に「教習所行き直したほうがいい」 [試オ波羅探題★]
- 【ファッション】「同級生に笑われたことも」現役女子大生が「全身レギンス姿」で大学に通う理由…日本に「アスレジャー」は定着するのか [湛然★]
- 【芸能】今田美桜、今年の漢字は『走』 世界陸上で熱狂 朝ドラ「あんぱん」で走り抜け [冬月記者★]
- 婚活アプリで独身とウソ「貞操権を侵害」と交際男性に賠償命令、地裁「女性に判断の機会失わせる行為」 [七波羅探題★]
- 高市内閣、立法権を掌握へ🇯🇵 [399259198]
- 古市憲寿「スタジオでも中国批判して気持ち良くなってる人はいるが高市答弁で日本人は損してる。国益を害した」スタジオ凍りつく★2 [931948549]
- 【悲報】自転車乗り、4月から終わる 普通に乗ってても2万3000円くらい罰金を取られる [455031798]
- 「スパイ防止法に反対する奴はスパイ」 ⬅︎これ [279254606]
- 今年の漢字って"米"以外に有力なのないよな
- チップとデールがトイレに駆け込んだ
