シェルスクリプトの変数に出力しているテキストファイルがあります。ただし、必要なのは最初の50文字だけです。
cat ${filename} cut -c1-50
を使用してみましたが、最初の50文字をはるかに超えていますか?これは、cut
が行を探す(100%確実ではない)ためかもしれませんが、このテキストファイルは1つの長い文字列である可能性があります。
cat
コマンドから最初のX文字を取得するためにパイプで接続できるユーティリティはありますか?
head -c 50 file
これは最初の50バイトを返します。
コマンドがすべてのOSで常に同じように実装されているわけではないことに注意してください。 LinuxおよびmacOSでは、このように動作します。 Solaris(11)では、/ usr/gnu/bin /にあるgnuバージョンを使用する必要があります
cut
コマンドは、パイプを使用してデータを渡す場合に機能します。
cat ${file} | cut -c1-50
または、猫の無用な使用を避けて少し安全にする:
cut -c1-50 < "$file"
上記のコマンドは、最初の50文字(またはcut
の実装に応じてバイト)を出力することに注意してください各入力行の。あなたが言うように、あなたのファイルが1つの巨大な行であるならば、それはあなたが期待することをするはずです。
dd status=none bs=1 count=50 if=${filename}
これは最初の50バイトを返します。
これまでのほとんどの回答は、1バイト= 1文字であると想定しています。これは、ASCII以外のロケールを使用している場合には当てはまらない場合があります。
それを行うためのもう少し堅牢な方法:
testString=$(head -c 200 < "${filename}") &&
printf '%s\n' "${testString:0:50}"
これは次のことを前提としています。
ksh93
、bash
(または最近のzsh
またはmksh
を使用しています(mksh
でサポートされているマルチバイト文字セットはUTFのみですが) -8およびset -o utf8-mode
)の後にのみ)およびhead
をサポートするバージョンの-c
をサポートします(最近ではほとんどがサポートされていますが、厳密には標準ではありません)。locale charmap
およびfile -- "$filename"
と入力します);そうでない場合は、ieで設定します。 LC_ALL=en_US.UTF-8
)head
でファイルの最初の200バイトを取得しました。これは私が考えることができるほとんどのケースをカバーするはずです。grep -om1 "^.\{50\}" ${filename}
その他のバリアント(ファイルの最初の行)
(IFS= read -r line <${filename}; echo ${line:0:50})
head -c 50 file.txt
たとえば、file.txtの最初の50文字が出力されます。
hexdump
を使用して、16進文字として出力します。hexdump -n 50 -v file.bin
たとえば、file.binの最初の50バイトを出力します。
-v
verboseオプションを使用しない場合、hexdump
は繰り返し行をアスタリスク(*
)に置き換えます。こちらをご覧ください: https://superuser.com/questions/494245/what-does-an-asterisk-mean-in-hexdump-output/494613#494613 。