アプリ版:「スタンプのみでお礼する」機能のリリースについて

ある文字列
pen=1,apple=2,orange=3
があるとします。

これから、apple=2のフィールドを抜き出すにはどうしますか。
場合によっては、
apple=3,pen=5,orange=1
だったり、
orange=9, apple=3,pen=5,school=1
だったりします。

しかし、必ず「apple=xx」の形で入っています。

その場合、「apple=xx」を抜き出すにはどうしますか?

A 回答 (10件)

apple=xx の xx 部が数値である前提で以下コマンドラインを実行



echo pen=1,apple=2,orange=3 | sed 's/.*\(apple=[0-9][0-9]*\).*/\1/'

または、その文字列がファイルに記載されているならば

sed 's/.*\(apple=[0-9][0-9]*\).*/\1/' < その文字列が記載されているファイル
    • good
    • 0

.*(apple=[-+]?[0-9]+[.]?[0-9]*).*


こうですね。
    • good
    • 0

echo "pen=1,apple=2,orange=3" | tr , '\n' | grep ^apple= | head -

    • good
    • 0

まちがえました。



LINE1="pen=1,apple=2,orange=3"
regexp=".*(apple=[0-9]*).*"
[[ $LINE1 =~ $regexp ]]
echo ${BASH_REMATCH[1]}
    • good
    • 0
この回答へのお礼

皆様、回答ありがとうございます。
大変、役に立ちました。

すみません、
「apple=2」
と書きましたが、便宜上の表現で、実際は
「apple=234.532」
などの任意の実数(負の数含む)が入ります。

難易度上がってすみません。

お礼日時:2017/06/24 23:36

おおさすが正規表現のプロは違いますね。

¥1なんてすっかり忘れてました。

LINE1="pen=1,apple=2,orange=3"
regexp=".*(apple=[0-9]*).*"
[[ $url =~ $regexp ]]
echo ${BASH_REMATCH[1]}

bash限定のsed使わない例。
    • good
    • 0

echo 'pen=1,apple=2,orange=3' | sed -e 's/.*\(apple=[0-9]*\).*/\1

    • good
    • 1
この回答へのお礼

すみません、
「apple=2」
と書きましたが、便宜上の表現で、実際は
「apple=234.532」
などの任意の実数(負の数含む)が入ります。

難易度上がってすみません。

お礼日時:2017/06/24 23:36

後「apple=xx」にしたいのでしたら、最初の置換後文字列を「apple=」にしてください。

    • good
    • 1

forいらないですよ。

正規表現だけでいけます。

ただごめんなさい、私の力では2回置換が必要です。正規表現のプロならいっぱつでいける正規表現かけるのかも。

「pen=1,apple=2,orange=3」を「^.*apple=」で正規表現で置換すると、
「2,orange=3」になりますので、再度「,.*$」で置換すると、
「2」になります。

「orange=9, apple=3,pen=5,school=1」でも「3」となります。

すいません、いまBashの実行環境がないのでためせてないですが、
http://utils.ipentec.com/WebTextUtility/ReplaceT …
こんなサイトでテストしました。

sed使わなくてもbashなら置換可能です。
http://d.hatena.ne.jp/ozuma/20130928/1380380390
「${変数名/置換前文字列/置換後文字列} 置換する」こちらを見てください。
echoしてるだけですが、変数に入れればいいかと思います。
    • good
    • 0
    • good
    • 0
この回答へのお礼

おっしゃるとおり、for文とかを使って、処理すればできそうです。
たとえば
------------------
LINE1="pen=1,apple=2,orange=3"
LINE2=`echo ${LINE} | sed -e "s/,/ /g" ` ## 「,」を「空白」に変換

for STRING in ${LINE2}
do
if [ ${STRING} ~= "appel" ]
done
-------------------

しかし、ワンライナーで処理したいのですが、方法ありますか。

お礼日時:2017/06/18 07:23

ゼロ文字以上の文字列+apple=の後ろの文字列で,の前までの正規表現で文字列を抜き出します。


http://www.megasoft.co.jp/mifes/seiki/
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

正規表現を使えばいいのですね。
具体的にどうすればいいのでしょうか。

sedでしょうかawkでしょうか。
もし、わかるようでしたら、ご指導ください。

お礼日時:2017/06/17 21:30

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!