• ベストアンサー

シェルで文字列に文字を挿入する方法

cat test.txtのような、コマンドの結果が次のようなとき、「(」の前に「=」を挿入したいのですが、正規表現で置き換えるしか方法はないんでしょうか? Array('3' '7' '9' '11'); 宜しくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.3

No2です。 「本当にやりたいことをストレートに書いた方がいい」というアドバイス内容が理解されなかったようですね。もう一度よく読んでいただければと思います。 sed の置換コマンドに書けるのは確かに正規表現ですが、sed 's/(/=(/' が正規表現を知らないから避けるほどのレベルとは思えません。 あとは、bashの機能で、 A=`コマンド` B=${A/\(/=(}

inshin
質問者

お礼

お世話になっております。 ご回答いただきまして、ありがとうございます。 すみません、こちらのサイトではあくまでも勉強目的で質問させて頂いていたので、万が一回答を頂けなかった場合でも他の方法で代用させて頂くつもりでしたので、敢えて目的の機能のみ質問させて頂きました。 ちなみに本当にやりたいことは、ブラウザで毎日やっていることを、シェルスクリプトで自動的にウェブを巡回してかわりにやってもらうことです。 コメントがなくて恐縮ですが、一例として以下のようなものになります。 #!/bin/bash LOGIN=`curl 'https://www.so-net.ne.jp/sso/portal/cgi-bin/login.cgi' -sSb c -c c | fgrep key` curl "https://www.so-net.ne.jp/sso/portal/cgi-bin/login.cgi" -sSb c -c c -d SSO_COMMON_ID=$ID -d SSO_COMMON_PWD=$PWD -d inkey=`echo ${LOGIN##*inkey} | cut -d= -f2 | cut -d\" -f2` -d ckey=`echo ${LOGIN##*ckey} | cut -d= -f2 | cut -d\" -f2` KUJI=`curl http://www.so-net.ne.jp/monthlykuji/js/kuji.js -sSb c -c c | fgrep AvailableOrgIdList` eval Array=`echo ${KUJI##*Array}| tr ',' ' '` for each in ${Array[@]} do echo -n "OrgID: $each " curl "http://www.so-net.ne.jp/monthlykuji/cgi/get.cgi" -sSb c -c c -d token=`echo -n $each$(date +%Y%m%d%H)monkuji | (md5 2>/dev/null || md5sum | cut -d' ' -f1)` -d org%5Fid=`echo $each` | grep "id\|message" | cut -d\> -f2 | cut -d\< -f1 done

その他の回答 (2)

  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.2

先の質問に回答した者ですが、本当にやりたいことをストレートに書いた方が有益なアドバイスが得られる可能性が高まります。 = を挿入するのは何かをやりたいがための手段ですよね? 最終的には何をしたいのでしょうか? AをするためにはBをすればいい。BをするためにはCをすればいい。Cをするためには=を挿入すればいい。それはどうするのでしょう? ↓ Aをするにはどうすればいいでしょう? 答え:単にZをすればいい。Bなど全く必要ない。 あと、正規表現を避けたい理由も。

inshin
質問者

お礼

お世話になっております。 たびたびすみません。 先ほどの質問で、出力結果がJavascriptの配列の時、配列名も一緒に出力されます。 なので、","を" "に置き換え、配列名と"("の間に"="を挿入できたほうがスマートな書き方なのではないかと思い、追加で質問させていただきました。 正規表現は普段使わないため、単純にあとから修正するときなど、見慣れたコマンド形式のほうがいいという、個人的な理由です^^; 今まで正規表現ではなく、別のコマンドで代用できたことがほとんどなので、もしかすると何かのコマンドを組み合わせると文字列に文字列を挿入できるのではないかと思いました。 よろしくお願いいたします。

回答No.1

シェルであれば正規表現を使うのが一般的とは思いますが: $ echo "Array('3','7','9','11');" | sed -e 's/(/=(/g' Array=('3','7','9','11'); awk で '(' で分割しても可能ですけど少し不自然な使い方ですね。 $ echo "Array('3','7','9','11');" | awk -F'(' '{print $1 "=(" $2}' Array=('3','7','9','11');

inshin
質問者

お礼

ご回答いただきまして、ありがとうございます。 遅くなりまして、すみません。 普通に考えて正規表現を使えば簡単にできますよね。 正規表現が嫌いというわけではないのですが、 普段あまり使わないため、あとあと見直したときに正規表現を調べなおしたりすることがあるので、 もしほかに方法があればと思い、質問させていただきました。 ありがとうございました。

関連するQ&A