• ベストアンサー

シェルスクリプトのifでの正規表現で\wが利用不可

なのですがどうすればいいでしょうか? 端末で x=a.out;if [[ $x =~ \.\w+$ ]];then echo ok;else echo ng;fi ng となり\wが使えません 一方 x=a.out;if [[ $x =~ \.[0-9a-z]+$ ]];then echo ok;else echo ng;fi ok です \wの代わりに[0-9a-z]+は長すぎるので何とかしたいのです 何かいい方法はないでしょうか? よろしくお願いします

  • reiman
  • お礼率73% (794/1076)

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

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

正規表現と一言で言っても、どんな表現使えるかは、その実装毎に違います。 bashのマニュアルには An additional binary operator, =~, is available, with the same precedence as == and !=. When it is used, the string to the right of the operator is considered an extended regular expression and matched accordingly (as in regex(3)). とあります。 「extended regular expression」「regex(3)」とあるように、POSIXの拡張正規表現(ERE)になります。 http://www.kt.rim.or.jp/~kbk/regex/regex.html#POSIX によると、EREに\wというものはありません。 どうしても\wを使いたいなら、\wが使える処理系を使う、という方法はありますが、かえって手間になると思います

reiman
質問者

補足

回答ありがとうございます 諦めるよりしかたがないのですね 2文字が8文字になるだけなので我慢するべきかもしれません

関連するQ&A

  • 正規表現 Bシェル

    Bシェルの正規表現を教えてください。 ある文字列の中に英数大文字、小文字、コンマ、ピリオド、アンダーバー、ハイフン以外が含まれていないかをチェックしたいです。以下のようにすると文字列LINEの先頭にあるとチェックできるのに、中にあると出来ません。教えてください。 if expr \"$LINE\" : [^a-zA-Z0-9\\,\\.\\_\\-] >/dev/null ; then echo \"チェックNG 使用不可能な文字が入っています。 ${LINE}\" >> ${LOG_FILE} else echo \"チェックOK ${LINE}\" >> ${LOG_FILE} fi

  • シェルスクリプト(if文)

    bashにてシェルスクリプトを作成しています。 XXXX_111122222333_YYYYMMDD 111122222333 といった2パターンのファイル名から、「111122222333」の部分を取得したいのですが、if文の条件式で悩んでいます。 if [ expr length ${p9} -gt 13 ] then a=`echo $p9|cut -c 6-9` b=`echo $p9|cut -c 10-14` c=`echo $p9|cut -c 15-18` else a=`echo $p9|cut -c 1-4` b=`echo $p9|cut -c 5-9` c=`echo $p9|cut -c 10-13` fi これで実行すると too many arguments というエラーが出てしまいます。(結果も正しくありません) 基本的な部分が理解できていないかと思うのですが、宜しくお願いいたします。

  • シェルのif文について

    シェルの書き方で悩んでいます。 A,Bファイルにいずれかが読み取れない場合に、エラーにする if [ -r "A" -a -r "B" ] then else echo "エラー" fi 悩んでるところ→[ -r "A" -a -r "B" ]の否定は、どのようにかくのでしょうか? よろしく御願いします

  • シェルスクリプトの if文について

    if文でずっと悩んでいます。 testIF.shというファイル名で作成したif文を実行したのですが、(kシェル) 「./testIF.sh[3]: testCount: 見つかりません。」 作成したif文は↓です。 ---------------------------------------- let testCount=0 if ( testCount > 0 ) ; then echo "OK!!" fi exit ---------------------------------------- 何がいけないのでしょうか。 まったく分かりません。

  • シェルスクリプトのテスト

    年が変わるとシェルの処理も替わります。 例えば: year=`date +%Y` if [ $year=2006 ];then echo "year 2006" fi if [ $year=2007 ];then echo "year 2007" fi テストをしたいですが、 2007年のテストは出来ますでしょうか? 教えてください!お願いします。

  • シェルスクリプトで実行したらエラーが出てきてしまいます。

    今シェルスクリプトでネットにつないだらサーバへ転送するプログラムを作ってます。 下記のような感じでプログラムを作ってcygwinで試しに動かしてみたらなぜかエラーが出ます。 #!/bin/sh #ネットワークにつながっているか確認 if [ping www.yahoo.co.jp 64 2]; then echo "OK" exit 1 #つながっていないのでつながるまで確認 else sleep 10[s] until [ping www.yahoo.co.jp 64 2]; do sleep 10[s] done #バックアップ開始 rsync バックアップ元 バックアップ先 exit 1 fi pingでネットにつないでるか確認しつながっていたらそのまま終了し、 つないでなかったらつながるまで待ち つながったらバックアップするという簡単なプログラムです。 (初心者なもので本で見ながら作りました。単純なプログラムしか作れないので・・・) エラーは行17が文法エラーというのが返ってきます。 ちなみにfiの行です。 どこがだめなんですかね?? 自分的にはいい感じなんですが。笑 また下記のようなプログラムも書いてみましたがfiの行がエラーって出てきます。 #!/usr/bin/sh if ping www.yahoo.co.jp 64 2; then echo "OK" exit else echo "NG" exit fi 詳しい方がいましたらご教授をお願いします。 また上記と似たようなプログラムがある方はぜひ教えてもらえるとうれしいです。 勉強になりますので。 よろしくお願いします。 PC環境 Windows XP Home Edition cygwinを利用している

  • Bシェルのif文

    if文の否定について教えてください。 if $aa='xxx' then else echo yyy fi 間違っているかもしれませんが上に書いたことをやろうとしています。 他の言語の if(!($aa='xxx'))echo yyy; をBシェルのif文で書くにはどうしたらいいですか? $aa='xxx'を$aa!='xxx'にするのではなくて、その外側のifの書式を教えてください。 最初に書いたコードでは、if(!条件)を知らないので if(条件) else 処理 endif のように書きました。

  • シェルスクリプトのif文

    シェルスクリプトのif文について質問です。 あるファイルが存在しないときだけ処理を行いたい場合、 下記のような記述をするしかないのでしょうか? if [ -e /tmp/test.txt ]; then  ダミー処理(val1=1など意味のない処理)  (ダミー処理を入れるのは何も書かないとエラーとなってしまうため) else   行いたい処理 fi elseを使わずに if  fi だけですますことはできないでしょうか? -eはファイルが存在するならば真なので 逆に意味が真となるようにしたいのですが・・・

  • bashでのif文内正規表現についての

    bashでのif文内正規表現についての質問です。 IPアドレスを正規表現にてマッチングさせたいのですが実現できなく困っています。 たとえば192.168.1.の1から128を引っ掛けたいのですがどうすれば実現できますか? 今は下記のように書いていますが、これではだめみたいです。 ARCHKIP=`netstat -rn | awk '{ print $1 }'` for i in `echo $ARCHKIP` do if [[ $i = 192.168.1.[1-128] ]];then echo "OK" fi done わかる方お教えください。

  • シェルスクリプト shiftとwhile

    下記の内容はスクリプトの一部を抜粋した内容です。 2箇所、理解が出来ない部分があるので、教えて頂けますでしょうか。 ------------------------------------------------ shift $(( $OPTIND -1)) if [ $# -eq 0 ]; then FileName="" elif [ $# -eq 1 ]; then if [ "\-" = "$1" ]; then FileName="" else FileName="$1" fi else echo "オプションが多い" exit fi if [ "" = "$FileName" ]; then while read line; do fcnctionA "$line" done else while read line; do fcnctionA "$line" done < "$FileName" fi ------------------------------------------------ (1) if [ "\-" = "$1" ]; then 部分が理解できないのですが、教えて頂けますでしょうか。 (2)  if [ "" = "$FileName" ]; then while read line; do fcnctionA "$line" done 基本はファイル名を指定して実行する事を前提としていると思います。 ファイル名を指定しないでスクリプトの実行をする場合は、1行ずつ標準入力で 入力すると思うのですが、このような使い方をする場合はあるのでしょうか。 下記よりも便利な点があるようでしたら、教えて頂けますでしょうか。 または、shiftと関係があるのでしょうか? if [ ! "" = "$FileName" ]; then while read line; do fcnctionA "$line" done < "$FileName" fi