[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2ch.scのread.cgiへ]
Update time : 01/12 09:15 / Filesize : 284 KB / Number-of Response : 907
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

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



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

768 名前:デフォルトの名無しさん [2018/11/30(金) 12:29:51.33 ID:vx8Iixcxa.net]

高級言語が
必要

769 名前:デフォルトの名無しさん [2018/11/30(金) 12:30:21.78 ID:+/lt4tPpr.net]
タイヤと
車輪は
同じもの

770 名前:デフォルトの名無しさん [2018/11/30(金) 12:47:31.33 ID:vx8Iixcxa.net]


止めよう

771 名前:デフォルトの名無しさん mailto:sage [2018/11/30(金) 13:04:32.40 ID:iEacaeBh0.net]
実は
CASEツール
です

772 名前:デフォルトの名無しさん mailto:sage [2018/11/30(金) 15:46:57.55 ID:ZZJKHSVT0.net]
それずっと前にKnuthが実践してた文芸作譜と同じじゃね?
そしてアレは超絶面倒な作業。

773 名前: mailto:sage [2018/11/30(金) 23:23:00.81 ID:MkfLpznc0.net]
>>766
>高級言語を超える、超高級言語が必要
ちょっとワクワクしてしまいましたことを、ここに告白いたします

774 名前:デフォルトの名無しさん mailto:sage [2018/12/01(土) 01:32:04.95 ID:3WCvWAVjM.net]
言語に縛られてるから駄目なんだよ

とか言ってみる

775 名前:デフォルトの名無しさん mailto:sage [2018/12/01(土) 02:53:09.42 ID:7CoKqMj50.net]
「縛られるのが好き」ってプログラマ、結構多いんですよ

とか言ってみる

776 名前:デフォルトの名無しさん [2018/12/01(土) 07:47:52.11 ID:U3mK8vlPr.net]
下ネタはもっと堂々と言わな逆にいやらしく感じるで



777 名前:デフォルトの名無しさん mailto:sage [2018/12/01(土) 10:18:14.73 ID:Ly5JuDld0.net]
全部縛ってヤってなんぼだと思うんです。

とか言ってみる。

778 名前:デフォルトの名無しさん mailto:sage [2018/12/01(土) 10:47:37.07 ID:Km1sjdO20.net]
お前らくだらない話ばっかり盛り上がるな

779 名前:デフォルトの名無しさん [2018/12/01(土) 12:34:48.97 ID:U3mK8vlPr.net]
さほど盛り上がっとらんやろw
人と関われよw

780 名前:デフォルトの名無しさん mailto:sage [2018/12/02(日) 02:44:47.66 ID:+c90NOTB0.net]
まあ 使える言語は多いほうが手広いわな

781 名前:デフォルトの名無しさん mailto:sage [2018/12/02(日) 17:31:01.53 ID:OYZHkh2Or.net]
>>776
知ってる一つの言語でなんでもしようとしちゃう
っていう意味かとおもてた

782 名前:デフォルトの名無しさん mailto:sage [2018/12/02(日) 18:30:06.74 ID:RWr+AACs0.net]
自由に安くやってが最も困る。

783 名前:デフォルトの名無しさん mailto:sage [2018/12/04(火) 18:22:49.34 ID:VVlGsdy50.net]
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より遅い筈。

784 名前:デフォルトの名無しさん mailto:sage [2018/12/04(火) 18:56:51.46 ID:bTQB60BC0.net]
statが遅いと言うのも幻想

785 名前:デフォルトの名無しさん mailto:sage [2018/12/04(火) 19:07:42.58 ID:HBlgjyZNM.net]
最近のファイルシステムはreaddirでタイプが取得できるよ

786 名前:デフォルトの名無しさん [2018/12/06(木) 00:12:43.36 ID:pQ33EIUW0.net]
>>783
linuxjm.osdn.jp/html/GNU_findutils/man1/find.1.html#lbAE
-Olevel
1
これはデフォルトの最適化レベルであり、伝統的な動作に当たる。 式を並べ替えるとき、ファイル名にのみ基づいた検査 (たとえば、 -name や -regex) が先に実行されるようにする。



787 名前:デフォルトの名無しさん mailto:sage [2018/12/06(木) 09:10:09.33 ID:cC0kDT7D0.net]
>>786
へえ!そうなんだ。
ってことはGNU/Linux使ってる限りは順番はどうでもいいんだな
ありがとう。

788 名前:デフォルトの名無しさん mailto:sage [2018/12/06(木) 15:10:37.27 ID:cC0kDT7D0.net]
引数に一律にコマンドで操作を施したあと、それらをもう一度引数として扱うにはどうすればいいかな
$ 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 名前:デフォルトの名無しさん [2018/12/06(木) 16:06:47.11 ID:59uVculK0.net]
>>788
eval set -- $(printf ' "$(printf "%%s" "$%d" | tr "[:lower:]" "[:upper:]")"' $(seq $#))

790 名前:デフォルトの名無しさん mailto:sage [2018/12/06(木) 16:38:57.36 ID:cC0kDT7D0.net]
>>789
ありがとう。

791 名前:デフォルトの名無しさん mailto:sage [2018/12/12(水) 21:07:46.42 ID:7+bnD1C/0.net]
ここかどうかわからんのだけど、メールの添付ファイルのテキストCSV部分を切り出してDB格納しようと思ったら、
シェルスクリプトでヘッダから切り出すしかない?

792 名前:デフォルトの名無しさん mailto:sage [2018/12/12(水) 21:36:28.16 ID:xr4it+i10.net]
そういう専用ツールがないんだったらそうだろうな

793 名前:デフォルトの名無しさん mailto:sage [2018/12/13(木) 19:34:10.52 ID:Nc8J2Ufn0.net]
>>550
別件でググっていたら、言及しているドキュメント見つけた
${1+"$@"} で動かないシェルもあるようだ

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 名前:デフォルトの名無しさん mailto:sage [2018/12/16(日) 07:48:44.86 ID:AoQUSXZn0.net]
Bashってシングルクォートの内部でない限りバックスラッシュでシングルクオートを直接エスケープできるんだな。
マニュアルにも書いてないけど他人のスクリプト見て発見した。
$ squo=\'
$ echo $squo
'
↑こうできる。Bashは楽でいいなぁ

795 名前:デフォルトの名無しさん mailto:sage [2018/12/16(日) 09:07:44.57 ID:rkLF3tWt0.net]
>>794
水を差すようで悪いがposixで規定されているから他のシェルでも同じになる

796 名前:デフォルトの名無しさん mailto:sage [2018/12/16(日) 09:55:51.26 ID:0jv0YmXXa.net]
なぜそれを特別に思ったのかわからんけど他は出来なかったりするの?



797 名前:デフォルトの名無しさん [2018/12/17(月) 19:35:33.43 ID:41bJ0tdVa.net]
\ はエスケープだし使う事はあるので特に目新しい感じはしない。

sambaでファイルサーバ作ってWindowsからもファイルが書かれるような状況だとファイル名にスペースだの括弧だの普通に入れられてLinuxでログインしている端末からだとエスケープせざるを得なかったりする。
俺の場合はそれで一文字だけエスケープはよく使う。

798 名前:デフォルトの名無しさん mailto:sage [2018/12/17(月) 21:17:48.10 ID:lO+98ZHR0.net]
Linuxで普通にファイル名にスペース入れられるんだから
sambaとかwindowsは全く関係ないけどね

799 名前:デフォルトの名無しさん mailto:sage [2018/12/17(月) 23:45:58.91 ID:LS1nUj7m0.net]
CUI使いとGUI使いの違いだな
CUIでわざわざくそめんどくさいスペースなんぞを好き好んでは使わない。GUIではふつーにわかりやすくもなるから使う、普通に入れるのはあたりまえ

800 名前:デフォルトの名無しさん [2018/12/17(月) 23:52:42.27 ID:oCmK2PVR0.net]
めんどくさくないけど?エアプなんキミ?

801 名前:デフォルトの名無しさん mailto:sage [2018/12/17(月) 23:54:51.53 ID:faSovs330.net]
有志のコードに
ファイル名が空白入りだと事故るものがあったような?

自分は
安全とって全部アンダーバー変換しておく

802 名前:デフォルトの名無しさん mailto:sage [2018/12/18(火) 00:10:28.35 ID:DLVg/wUV0.net]
>>800
めんどくさいめんどくさくないはまあ人次第だけどな
CUIでなんやかんやキーボード打ってる時に、エスケープしたり"や'囲ったり、そもそもスペースはもろもろコマンドでデリミッターだったりで、めんどくさいと思うけどな
人次第ではあるが、そゆのが想像できなずにエアプと言えるのがエアプっぽいと思わなくもない

803 名前:デフォルトの名無しさん mailto:sage [2018/12/18(火) 01:24:02.71 ID:2j/3pVMu0.net]
>>801
有志って言ってもタダの素人だっただけの話じゃん

804 名前:デフォルトの名無しさん [2018/12/18(火) 03:02:35.05 ID:HuP+yDtL0.net]
>>798
もちろんファイル名には / 以外は何でもありだが Linux だけ使ってると普通はあまりそういうファイル作らないじゃない。一々エスケープしなきゃならないしシェルスクリプトで扱いづらいし。
まあ趣味の問題ではあるけどな。

805 名前:デフォルトの名無しさん mailto:sage [2018/12/18(火) 03:52:25.12 ID:aYYQx5Ta0.net]
libreofficeから「報告書 2018-12-18」という名前で保存することの何が面倒なのか?

806 名前:デフォルトの名無しさん mailto:sage [2018/12/18(火) 05:00:11.76 ID:CtnsxEVc0.net]
うわあ



807 名前:デフォルトの名無しさん mailto:sage [2018/12/18(火) 05:48:13.89 ID:aYYQx5Ta0.net]
ファイル名にスペースが使えるOSが悪いんだって言いたいのかな?w

808 名前:デフォルトの名無しさん [2018/12/18(火) 06:17:30.36 ID:mQMHvFDr0.net]
>>802
アルファベットや数字打つのとなんら変わらんけど?
そもそもシェルには補完ゆうもんがあるんやでエアプさんw

809 名前:デフォルトの名無しさん [2018/12/18(火) 09:37:03.21 ID:92SsvGE7a.net]
>>805
ああ。WindowsみたいにGUIメインで使ってるの?それだけだったら面倒じゃないかもね。

810 名前:デフォルトの名無しさん mailto:sage [2018/12/18(火) 10:24:35.01 ID:H+ovSSRq0.net]
>>808
なにをいいたいのかイミフすぎだな、プロフェッショナルwすぎて
補完時にもバックスラッシュ打たなきゃならんだろ?打たなくていい環境なの?そういう環境もあるんだよ
なんかただ馬鹿にしたいだけのお人か?しょうもない

811 名前:デフォルトの名無しさん mailto:sage [2018/12/18(火) 12:13:46.40 ID:bhmdNwABa.net]
なんで自分以外みんな非効率って思ってるのここの人たち
最強は俺だから落ち着けよ

812 名前:デフォルトの名無しさん [2018/12/18(火) 12:15:53.17 ID:92SsvGE7a.net]
Tabキー押すと自動で保管したり変換したりしてくれる場合は楽かも。
楽ってだけで見た目エスケープだらけの見辛い状態にはなるが。

813 名前:デフォルトの名無しさん [2018/12/18(火) 12:25:17.53 ID:Lulkb9OFr.net]
>>810
はいはいエアプさんはそろそろお昼寝の時間でちゅよ〜w

814 名前:デフォルトの名無しさん mailto:sage [2018/12/18(火) 15:34:29.41 ID:kLOm0zeN0.net]
アホすぎなレスで笑うww

815 名前:デフォルトの名無しさん mailto:sage [2018/12/18(火) 15:42:44.01 ID:DOEC5j1K0.net]
こいつらプログラム言語はシェルスクリプトしか使ったこと無いんか?
シェルスクリプトは珍しく引数の文字列をクォート(もしくはダブルクォート)で
くくるのが必須じゃない言語だが他の言語は殆どクォートでくくるんだぞ

"foobar" も "foo bar" も入力のしやすさに大差ないだろ
エスケープが必要なのは \ 等であってスペースはエスケープ不要なごく普通の文字なんだが
いつものことだが(シェルスクリプト以外の)経験の差を感じるよな

816 名前:デフォルトの名無しさん mailto:sage [2018/12/18(火) 16:01:13.36 ID:kLOm0zeN0.net]
何をお怒りか存じませんが、括らなくてもいいから括らないのが普通になるんでございますよ。当然括るのが必須なら括るのが普通。シェルスクリプトでもスクリプトファイル書くときは変数展開では普通に括るし
コマンド叩くときにはいつも括ってるの??



817 名前:デフォルトの名無しさん mailto:sage [2018/12/18(火) 16:03:24.94 ID:kLOm0zeN0.net]
>スクリプトファイル書くときは
ああ、ワンライナーなんぞでもだな。ここんとこ間違い/不要

818 名前:デフォルトの名無しさん mailto:sage [2018/12/18(火) 16:21:43.27 ID:DOEC5j1K0.net]
>>816
> 何をお怒りか存じませんが、
わかってないのか? スペースが含まれてるファイル名に対応するのは
プログラマとして当然の話だということだよ

819 名前:デフォルトの名無しさん mailto:sage [2018/12/18(火) 16:24:38.45 ID:kLOm0zeN0.net]
>>818
別にそれは普通だな。>>816でそう書いているんだけど?
そんな話じゃないぞ。自分の範疇でが主な話だよ?俺はな

820 名前:デフォルトの名無しさん mailto:sage [2018/12/18(火) 16:28:29.69 ID:DOEC5j1K0.net]
>>819
わかってないのに、途中から割り込んでくるなよ
最初からLinuxでもファイル名にスペースを入れるのは普通だって言ってるだろ
sambaとかwindowsは全く関係ない

821 名前:デフォルトの名無しさん mailto:sage [2018/12/18(火) 16:33:56.90 ID:kLOm0zeN0.net]
>>820
>>815 で具体的に誰かになんて言ってないやん
ああ、それに対しても>>799だっただけどなあw また、>>818と同じ意味で>>797に対しても
わかんねえかなあw経験を生かしてご理解ください

822 名前:デフォルトの名無しさん mailto:sage [2018/12/18(火) 16:56:33.71 ID:DOEC5j1K0.net]
アホすぎなレスで笑うww

823 名前:デフォルトの名無しさん [2018/12/18(火) 17:14:23.03 ID:92SsvGE7a.net]
WindowsだとC言語とかでパスの区切りが \ になってて毎回 \\ と入れなきゃいけないのも面倒だな。
実は / でも大丈夫だったりはするが。

824 名前:デフォルトの名無しさん mailto:sage [2018/12/18(火) 17:18:15.10 ID:1JLRyxNd0.net]
今はパスにスペース入れるのも普通だし、対応もできるけど
トラブルのもとは根絶したいから、自分は使わない、それだけ

825 名前:デフォルトの名無しさん mailto:sage [2018/12/18(火) 17:24:06.70 ID:kLOm0zeN0.net]
>>822
ww ざんねんなこって。いろいろとw

826 名前:デフォルトの名無しさん mailto:sage [2018/12/18(火) 17:31:06.24 ID:1JLRyxNd0.net]
パスをコマンドの引数にする必要がある場合、
例えば、hogecommand --foo_option="filepath=[パス],otheroption=bar" なんていうのがある時、
パスにスペースが入っていると、コマンド自体がパースするときに一工夫がいる。
シングルクォートが使えるシェルならいいが、Windowsのように使えないものもあるから、
バックスラッシュなどでエスケープしたり、コマンドが以下の様な別の区切り文字を用意していたりする。
--foo_option=[filepath="/path/with space/",otheroption=bar]

対処方法がなかなか見つからないこともあり、面倒くさいので、
自分からすすんでスペースを入れようとは思わない。



827 名前:デフォルトの名無しさん mailto:sage [2018/12/18(火) 17:46:09.05 ID:DOEC5j1K0.net]
× パスにスペースが入っていると、コマンド自体がパースするときに一工夫がいる。
○ コマンドの引数の形式を適当に決めると、パースするときに一工夫がいるようになってしまう。

828 名前:デフォルトの名無しさん mailto:sage [2018/12/18(火) 17:50:36.86 ID:DOEC5j1K0.net]
ちなみに気づいていないようだから言うと
>>826はパスにスペースが入っていると困る問題ではない

hogecommand --foo_option="filepath=/path/with space/,otheroption=bar"

,でsplitして、○○=を消せばいいだけだから何も困らない
この例で困るのは、パスにカンマが含まれている場合であって
スペースではない

829 名前:デフォルトの名無しさん mailto:sage [2018/12/18(火) 18:16:22.51 ID:1JLRyxNd0.net]
>>828
ああ、わるい、オプションの階層が一段階足らなかった。

hogeコマンドが、別のライブラリ(foo)のオプションを呼ぶような場合に、

hogecommand --hoge_option=foo_option="filepath=[パス],otheroption=bar"
hogecommand --hoge_option "--foo_option filepath=[パス],otheroption=bar"

こんなパターンがあって、そのままではやはりパースに一工夫が必要で面倒くさい。
ちなみに、上はmpv、下はyoutube-dlで使われている。

830 名前:デフォルトの名無しさん mailto:sage [2018/12/18(火) 18:19:12.99 ID:DOEC5j1K0.net]
別のコマンドを呼び出すなら、別のコマンドにそのまま渡せばよかろう?

hogecommand --foo_option="どんな内容でも"

betsucommand どんな内容でも

はい。おしまい

831 名前:デフォルトの名無しさん mailto:sage [2018/12/18(火) 18:24:29.26 ID:n1+CJQ+h0.net]
ちなみにファイル名により柔軟なのはWindowsよりも寧ろLinux(というかUnix系)だぞ。
Windowsは「con」とか「aux」とかも駄目だしバックスラッシュやコロンが含まれても駄目。
Unix系のOSは「\0(空文字)」と「/(スラッシュ)」だけが不適合で,あとは全ての文字をファイル名として
使用できる。

832 名前:デフォルトの名無しさん mailto:sage [2018/12/18(火) 18:35:11.65 ID:/rMHixhE0.net]
開業コードもつかえるのはまれにネタになる

833 名前:デフォルトの名無しさん mailto:sage [2018/12/18(火) 22:33:16.76 ID:2j/3pVMu0.net]
>>810
今時はWindowsのコマンドプロンプトだって必要に応じてエスケープしてくれるぞ?

834 名前:デフォルトの名無しさん mailto:sage [2018/12/18(火) 22:34:34.10 ID:2j/3pVMu0.net]
>>831
\0も使えたと思うが...
消せなくなったりするけどさ

835 名前:デフォルトの名無しさん mailto:sage [2018/12/18(火) 22:57:59.19 ID:uKKjGArEH.net]
>>834
消す前に作れねーだろ

836 名前:デフォルトの名無しさん [2018/12/18(火) 22:59:29.33 ID:mQMHvFDr0.net]
消せるわこのエアプw



837 名前:デフォルトの名無しさん mailto:sage [2018/12/18(火) 23:44:21.87 ID:n1+CJQ+h0.net]
名前に\0を含むファイルは作れないと思うけど。
少なくともPOSIXでは禁止されているし,pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap03.html#tag_03_170
ext4でも作成できない。

……「エアプ」はどっちだろう。

838 名前:デフォルトの名無しさん mailto:sage [2018/12/18(火) 23:56:48.31 ID:DOEC5j1K0.net]
正直ファイル名に\0が使えようが使えまいが
シェルスクリプトで\0が扱えないのでどうでもいい

839 名前:デフォルトの名無しさん [2018/12/19(水) 04:45:08.43 ID:gf1Tua9E0.net]
エアプってなんなん?

840 名前:デフォルトの名無しさん mailto:sage [2018/12/19(水) 07:27:20.06 ID:+7lasSiAM.net]
¥x00

841 名前:デフォルトの名無しさん [2018/12/19(水) 12:42:42.59 ID:guVdMf63r.net]
>>839
おまえらの事やんw

842 名前:デフォルトの名無しさん mailto:sage [2018/12/20(木) 00:17:43.13 ID:6pIAvd2J0.net]
Airぷ

843 名前:デフォルトの名無しさん mailto:sage [2018/12/20(木) 00:39:10.52 ID:0M5ZFUn5M.net]
for i in {0..255}; do touch "./hoge$(printf "\x$(printf "%02x" $i)")foo"; done

844 名前:デフォルトの名無しさん mailto:sage [2018/12/22(土) 13:28:39.38 ID:t1Sp89dZ0.net]
エロ動画サーフィンで広告サイトが開いてしまったら、
デスクトップのシェルスクリプトにドラッグアンドドロップすることで
そのサイトのIPアドレスをHOSTSファイルに追加する

845 名前:デフォルトの名無しさん mailto:sage [2018/12/22(土) 13:59:19.13 ID:aa5NQG9N0.net]
なんていうことをしていたら、hostsファイルの行数が
数千行になってしまった

846 名前:デフォルトの名無しさん mailto:sage [2018/12/23(日) 08:08:03.20 ID:W0WvAA710.net]
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の正規表現だけでやりたい



847 名前:デフォルトの名無しさん mailto:sage [2018/12/23(日) 08:14:34.77 ID:yUjQiXy10.net]
なんでそんなに正規表現に拘るのかわからん

#!/bin/sh
while IFS= read -r line; do
echo $line
done

 

848 名前:デフォルトの名無しさん mailto:sage [2018/12/23(日) 12:09:04.04 ID:W0WvAA710.net]
>>847
おお、早速
thx
単に知らなかっただけです。
任意文字の繰り返しを1文字に置換したいときはどーするんですか?

849 名前:デフォルトの名無しさん mailto:sage [2018/12/23(日) 12:13:13.41 ID:W0WvAA710.net]
結局、bashの正規表現は2文字以上全置換を記述できないんですかね?
bashの正規表現でわからないことがいろいろあるんですよ。
文頭置換したいとき'^'に相当するのはどう書くかとか?

850 名前:デフォルトの名無しさん [2018/12/23(日) 13:58:44.05 ID:nNQ759QC0.net]
ま、とりあえずこれでも見ろ。

bashの変数内文字列置換まとめ
https://qiita.com/aosho235/items/c36568830a8d47288284

851 名前:デフォルトの名無しさん mailto:sage [2018/12/23(日) 14:09:56.35 ID:yUjQiXy10.net]
>>848
IFSで指定しろ

852 名前:デフォルトの名無しさん [2018/12/23(日) 14:18:28.55 ID:nNQ759QC0.net]
でもってこれ。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 にセット

853 名前:デフォルトの名無しさん mailto:sage [2018/12/23(日) 15:08:28.31 ID:eEMSqKaq0.net]
>>848
ちょっと目的と違うかもしれんが
trコマンドの-sオプションもお勧めだよ。
POSIXで定められているので汎用性高いし、あとawkやsedを使う方法より若干高速

854 名前:デフォルトの名無しさん mailto:sage [2018/12/23(日) 15:10:20.98 ID:yUjQiXy10.net]
外部コマンドを呼び出している以上
遅くなることに変わりはない

855 名前:デフォルトの名無しさん mailto:sage [2018/12/23(日) 16:10:20.07 ID:eEMSqKaq0.net]
「awkやsedを使う方法より」

856 名前:デフォルトの名無しさん mailto:sage [2018/12/23(日) 16:20:58.12 ID:yUjQiXy10.net]
「awkやsedを使う方法より若干高速
と言ったって外部コマンドを呼び出している以上
遅くなることに変わりはない」



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を実装しろ






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<284KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef