引数を渡す tcsh にシェル スクリプトがあり、その長さはさまざまです。引数の可能な値は、文字 -c、s、i、q、a です。また、これらの文字の組み合わせ。(例: cs、si、ca、iq、qa、csq、acs、csia ..など)。文字の順番は問いません。私の問題は、これらの 5 以外の文字の引数をチェックし、有効な文字が複数回出現するかどうかを確認することです (0 回は問題ありません)。スクリプトは両方の条件をチェックし、エラーをスローする必要があります。この目的で if ステートメントで使用できる正規表現はありますか?
質問する
20161 次
2 に答える
3
使用できるコードのサンプルを次に示します。「X」を使用すると、比較が強制的に文字列になります。
#!/bin/csh -f
if ( $#argv > 0 ) then
echo arg is $1
if ( X$1 =~ X-* ) then
echo "we have an argument"
if ( "X$1" =~ X-c[aeiou] ) then
echo I found -c followed by vowel
else if ( "X$1" =~ "X-c" ) then
echo I found -c alone
else
echo I found a -c but not a valid combo
endif
else
echo I found an unknown argument: $1
endif
endif
于 2013-05-16T16:53:01.263 に答える
0
これは、2 つの正規表現チェックで行うのが最も簡単です。
このコードを見てください:
#!/bin/tcsh
echo $1 | grep -q -e "[^csqai]"
if ( $? != 0 ) then
echo "Valid characters"
else
echo "Invalid characters"
endif
echo $1 | grep -q -e "\([csqai]\).*\1"
if ( $? != 0 ) then
echo "No repeated valid characters"
else
echo "Repeated valid characters"
endif
最初の正規表現は無効なすべての文字を検索し、2 番目の正規表現は繰り返し文字を検索します。
でこれらのチェックを行う方法がわからないtcsh
ので、 で行いましたgrep
。-q
旗はgrep
沈黙する。$?
一致が見つからない場合は 0 です。
于 2013-02-13T01:25:48.880 に答える