0

ファイルを検証する bash スクリプトを作成しようとしています。要件の 1 つは、ファイル内に「2」が 1 つだけある必要があることです。

現時点での私のコードは次のとおりです。

regex1="[0-9b]*2[0-9b]*2[0-9b]*"

# This regex will match if there are at least two 2's in the file
if [[ ( $(cat "$file") =~ $regex1 ) ]]; then
    # stuff to do when there's more than 1 "2"
fi

#...


regex2="^[013456789b]*$"
# This regex will match if there are at least no 2's in the file
if [[ ( $(cat "$file") =~ $regex2 ) ]]; then
    # stuff to do when there are no 2's
fi

私がやろうとしているのは、次の部分を一致させることです:

654654654654
254654845845
845462888888

(そこには 2 が 2 つあるので、一致するはずです)

987886546548
546546546848
654684546548

(そこには 2 がないため、一致する必要があります)

=~演算子を使用してすべての行を検索する方法はありますか?

4

4 に答える 4

3

ファイルを検証する bash スクリプトを作成しようとしています。要件の 1 つは、ファイル内に「2」が 1 つだけある必要があることです。

使ってみてgrep

#!/bin/bash

file='input.txt'

n=$(grep -o '2' "$file" | wc -l)
# echo $n

if [[ $n -eq 1 ]]; then
  echo 'Valid'
else
  echo 'Invalid'
fi
于 2013-11-11T14:58:03.870 に答える
1

これはどう:

twocount=$(tr -dc '2' input.txt | wc -c)
if (( twocount != 1 ))
then
  # there was either no 2, or more than one 2
else
  # exactly one 2
fi
于 2013-11-11T15:24:36.033 に答える
0

これまでと同じようにアンカーを使用して、非s の文字列2、 a 2、および非2s の別の文字列に一致させます。

^[^2]*2[^2]*$
于 2013-11-11T14:31:23.400 に答える
0

awkwithを使用すると、複数行の正規表現一致が実際に可能null record separatorです。

以下のコードを検討してください。

awk '$0 ~ /^.*2.*2/ || $0 ~ /^[013456789]*$/' RS= file
654654654654
254654845845
845462888888

2 つの改行に達するまで、RS=awk が複数の行を 1 行に結合することに注意してください。$0

于 2013-11-11T15:10:15.460 に答える