【プログラミング】シェルスクリプトに自信ニキきて

1 名前:ひみつの名無しさん 投稿日時:2020/08/10(月) 22:56:36.869 ID:fG/1PFceM
#文字列.txt
ほげ3ほげ2ほげ
ぴ5よぴよぴよ
てす10てすてす

こんな感じの文字列があるとして
この中の数字を一つ一つ抽出して、それを任意の関数(ここでは引数を2倍にする関数BAIZOU)に渡して出てきた値に置換したい

結果は↓みたいな

ほげ6ほげ4ほげ
ぴ10よぴよぴよ
てす20てすてす

文字列にある数字の個数は毎回ランダム
どうすればいい?

2 名前:ひみつの名無しさん 投稿日時:2020/08/10(月) 22:57:24.349 ID:fG/1PFceM
いろいろやってみたけどforループで一部分だけ置換できるのが限界

function BAIZOU {
expr($1 \* 2)
}

array=`cat “文字列.txt” | grep -oP '[0-9]*'`

for i in ${array[@]}
do
cat “文字列.txt” | sed "s/$1/$(BAIZOU $i)/g"
done

3 名前:ひみつの名無しさん 投稿日時:2020/08/10(月) 22:57:29.249 ID:fG/1PFceM
助けて
4 名前:ひみつの名無しさん 投稿日時:2020/08/10(月) 22:57:52.039 ID:cvVE7mRA0
シェルスクリプトでやる理由は?
7 名前:ひみつの名無しさん 投稿日時:2020/08/10(月) 23:03:23.590 ID:fG/1PFceM
>>4
1番しっくりくるから
5 名前:ひみつの名無しさん 投稿日時:2020/08/10(月) 22:58:33.613 ID:6rHoj9LH0
55は110?1010?
9 名前:ひみつの名無しさん 投稿日時:2020/08/10(月) 23:03:39.002 ID:fG/1PFceM
>>5
そうだね
6 名前:ひみつの名無しさん 投稿日時:2020/08/10(月) 23:02:08.877 ID:7+3VESWW0
シェルスクリプトからPythonで書いたプログラムを呼べば解決
11 名前:ひみつの名無しさん 投稿日時:2020/08/10(月) 23:04:58.717 ID:fG/1PFceM
>>6
やっぱPythonに頼るしかないのかー
プロジェクトで上のコード以外も全てシェルで作っちゃったからできれば統一したかったな
8 名前:ひみつの名無しさん 投稿日時:2020/08/10(月) 23:03:38.391 ID:PKOKkz8v0
俺の仕事だったら真面目に書くけどシェルスクリプト嫌いだからなぁ~(ミサワ顔)
12 名前:ひみつの名無しさん 投稿日時:2020/08/10(月) 23:06:07.053 ID:fG/1PFceM
>>8
そこをなんとか~
10 名前:ひみつの名無しさん 投稿日時:2020/08/10(月) 23:03:55.454 ID:cgG21xrYa
これをシェルスクリプトでやるのは縛りプレイだわ
14 名前:ひみつの名無しさん 投稿日時:2020/08/10(月) 23:07:14.606 ID:fG/1PFceM
>>10
マジかよ…
13 名前:ひみつの名無しさん 投稿日時:2020/08/10(月) 23:07:10.370 ID:PKOKkz8v0
awk使お?
awkならセーフだよあれはギリシェルスクリプト
17 名前:ひみつの名無しさん 投稿日時:2020/08/10(月) 23:11:42.664 ID:fG/1PFceM
>>13
ググったけどawkって連想配列もできるのか
どうやるかはもう少し勉強しなきゃだけど希望が見えてきた
15 名前:ひみつの名無しさん 投稿日時:2020/08/10(月) 23:10:40.389 ID:HRdA60tj0
まず「UNIXという考え方」を読んでこい
18 名前:ひみつの名無しさん 投稿日時:2020/08/10(月) 23:14:37.744 ID:fG/1PFceM
>>15
なんか小さなプログラムとか出てきた
やろうとしてることはシェルの目的に反するってことか
21 名前:ひみつの名無しさん 投稿日時:2020/08/10(月) 23:16:56.600 ID:HRdA60tj0
>>18
良書だから暇あればお勧めする

基本は適材適所の道具を使う
そしてよりシンプルな方法の組み合わせで対応する
あとで面倒なことにならないように

25 名前:ひみつの名無しさん 投稿日時:2020/08/10(月) 23:21:40.092 ID:fG/1PFceM
>>21
サンクスそうするわ

>>22
たぶんない
仕事とかではないしあんま難しいことはできない

27 名前:ひみつの名無しさん 投稿日時:2020/08/10(月) 23:22:55.378 ID:HRdA60tj0
>>25
難しいことっていうか
問題をきちんと解決しておいたほうが後が楽じゃねって話
仮にこれが小手先でうまくクリアできたとしても、さらに追加の要求が出たときに破綻するから
16 名前:ひみつの名無しさん 投稿日時:2020/08/10(月) 23:10:52.072 ID:VLs8RALN0
数字は半角、その他は全角?
入力の行長は固定?不定?
スペースは入るの?
19 名前:ひみつの名無しさん 投稿日時:2020/08/10(月) 23:16:10.181 ID:fG/1PFceM
>>16
数字の間にはスペースは入らない
数字の横なら入るかも
数字以外は英語とかも、もちろん半角と全角も混じる
行長も不定
22 名前:ひみつの名無しさん 投稿日時:2020/08/10(月) 23:17:50.254 ID:HRdA60tj0
>>19
構文解析のプログラム組んだことある?
20 名前:ひみつの名無しさん 投稿日時:2020/08/10(月) 23:16:35.556 ID:fG/1PFceM
数字自体は半角
26 名前:ひみつの名無しさん 投稿日時:2020/08/10(月) 23:22:24.502 ID:7+3VESWW0
awkだってシェルスクリプトじゃなくて外部のプログラムじゃん?

そりゃあPythonよりはawkの方が最初からインストールされてる可能性は高いけど

28 名前:ひみつの名無しさん 投稿日時:2020/08/10(月) 23:23:05.773 ID:NlVRX9b0a
uwscとかでもできそう

コメント

タイトルとURLをコピーしました