1

以下のシェルスクリプトはtest.shであり、現在、10番目から15番目の文字が「000000」に等しいかどうかを確認できます。ただし、空のファイルだけでなく、''6個のヌルスペースもチェックする必要があります。質問は:1)空のファイルをチェックする方法は?

filename=$1

extracted=`head -1 $filename | cut -c10-15`

if [ $extracted -eq '000000' ] ###how to check for '      ' 6 null character with or operator?
then 
mv $filename new.$filename
fi

例:入力ファイル:

ケース1(6つのゼロ000000の前後の一部の文字)truefile.txt:

123456789000000161718

ケース2(空のファイル)trueemptyfile.txt:

"there's nothing in this file. Empty. "

ケース3('' 6個のヌル文字の前後の一部の文字)truepartialempty.txt

123456789      16171819

ありがとうございました

そしてもう1つ、これらすべてのファイルは/tempフォルダーの下にあります

/temp> ls

 test.sh truefile.txt trueemptyfile.txt truepartialempty.txt

test.shを実行してすべてのファイルをチェックする方法。ありがとうございました。

それは...ですか?

 sh test.sh *.*
4

1 に答える 1

0

null 文字の意味をより適切に定義する必要があります。

を表示する' 'と、それらはスペース文字です。ヌルという言葉にはいくつかの解釈があります。DBランドでNULLは「未知の値」を意味する特殊な言葉です。プログラミングでは、NUL、または NULL、または null は、おそらく char を意味し\000ます。そのデジタル値は、「C」プログラムで(少なくとも)「文字列の終わり」を示す特別なマーカーとして使用されます。

スペース文字を意味すると仮定すると、定義したとおりにそれらを検索できます。

if [ $extracted -eq '       ' ] 
#--------------------^^^^^^^

しかしもちろん、$exacted は 000000 と ' ' の両方に等しいことはできませんよね?

これらの値を次のようにテストする方が簡単だと思うかもしれません

if echo "$extract" | grep -q '000000' ; then
      echo found 000000
fi
if echo "$extract" | grep -q '      ' ; then
       echo found spaces
fi

\000 は、grep を含む c-lang プログラムや unix のすべてのプログラムにとって特別な意味を持つため、確実に実行できないことに注意してください。

if echo "$extract" | grep -q '\000\000\000\000\000\000\000' ; then 
 ....

(実際には、「$extract」はファイルではないため、うまくいくかもしれませんが、試してみるとgrep -q '\000' myFile、定義上、内部に '\000' を含むファイルはバイナリファイルであり、テキストではないため、おそらく確実には機能しませんfile、および grep などは、テキスト ファイルをスキャンするためのツールです)。

それが本当にあなたが望むものである場合、これらを見つけるためのトリックがある可能性が高いので、それがあなたの要件であるかどうかを示すために質問を編集してください.

IHTH

于 2012-12-13T03:54:35.317 に答える