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

awkで、文字列の最後に特定の文字があったときにそれを削除するというものを作ろうと思います。
最後の文字が何であるかを調べるには、lengthで文字列の長さを調べてから、substrを使えば調べられると思うのですが、その文字を削除する方法がわかりません。文字列のx文字目までを取得する、あるいは、x文字目の文字を置換する(この場合ヌルに)という操作ができれば良いと思うのですが、それらしい文字列関数が無いように思います。どのような操作をするべきなのでしょうか?
環境は、Windows98でgawk32を使っています。

A 回答 (2件)

文字列の最後だけをターゲットにするのであれば、長さなんて知らなくても


正規表現でOKです。

例えば、文字列 s の末尾が英小文字だったら削除する、だったら

if ( s ~ /[a-z]$/ ) {
 sub( /.$/, "", s );
}

という感じ。

ちょっと正規表現が見にくいでしょうか?
sub() の行だけを全角文字で書くと

sub( /.$/, ””, s );

です。
    • good
    • 1
この回答へのお礼

なるほど。正規表現ってはこうやって使うんですね。今まで、検索の時に便利になる程度のものと思っていましたが、なかなか強力な使い方できることがわかりました。ありがとうございます。

お礼日時:2001/08/07 20:23

もっと良い方法があるかもしれませんが(awk最近あまり使ってないので...)


substrを使うのはどうでしょうか?
BEGIN {
str = "abcdef"

print "before:" str
str = substr( str, 0, length( str ) - 1 )
print "after :" str
}
    • good
    • 1
この回答へのお礼

なるほど、substrでもこうやれば可能ですね。substr自体は知っていたのですが、この使い方に思い至りませんでした。有り難うございます。

お礼日時:2001/08/07 20:25

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