これは実際には、外部プログラムを使用せずに Bash で実行できます (これを使用するスクリプトは #!/bin/bash
で開始する必要があります) #!/bin/sh
の代わりに 式 ${VARIABLE:offset:length}
を使用して、POSIX シェルに準拠しません) (ここで :length
オプションです):
#!/bin/bash
STR="123456789"
echo ${STR:0:1}
echo ${STR:0:5}
echo ${STR:0:10}
echo ${STR:5:10}
echo ${STR:8:10}
この出力が得られます:
1
12345
123456789
6789
9
開始オフセットは 0 から始まり、長さは少なくとも 1 でなければならないことに注意してください。括弧内の負のオフセットを使用して、文字列の右側からオフセットすることもできます:
echo ${STR:(-5):4}
5678
ファイルを読み取るには、最初の 8 文字を行ごとに繰り返しフェッチし、それらを端末に出力します。while
を使用します。 次のようにループします:
while read LINE
do echo "${STD:0:8}"
done < "/path/to/the/text_file"
Bash の文字列操作について知る必要があるすべての非常に役立つリソースは、https://tldp.org/LDP/abs/html/string-manipulation.html にあります。
cut
で :
$ cut -c-22 file
0000000000011999980001
0000000000021999980001
0000000000031999980001
0000000000041999980001
0000000000051999980001
0000000000061999980001
2 番目の要件を理解している場合は、最初の 22 文字を長さ 10 と 12 の 2 つの列に分割してください。 sed
がこれに最適です:
$ sed -r 's/(.{10})(.{12}).*/\1 \2/' file
0000000000 011999980001
0000000000 021999980001
0000000000 031999980001
0000000000 041999980001
0000000000 051999980001
0000000000 061999980001
sudo_O は素晴らしいカットと sed のソリューションを提供してくれました。私は awk ワンライナーを追加しました:
awk 'BEGIN{FIELDWIDTHS="22"} {print $1}' file
echo "000000000001199998000180000 DUMMY RAG"|awk 'BEGIN{FIELDWIDTHS="22"} {print $1}'
0000000000011999980001
空の文字を使用 (要件によって異なります。スペースをスキップするか、出力に含めてカウントします)
空白もカウントして出力に表示する必要がある場合:(上記のコマンドを変更する必要はありません)
echo "0 0 0 0 00000001199998000180000"|awk 'BEGIN{FIELDWIDTHS="22"} {print $1}'
0 0 0 0 00000001199998
これらのスペースをスキップしたい場合:(クイック アンド ダーティ)
echo "0 0 0 0 00000001199998000180000"|sed 's/ //g'|awk 'BEGIN{FIELDWIDTHS="22"} {print $1}'
0000000000011999980001
特定のディレクトリに環境変数を設定する
Linux で mongod dead but subsys locked および Insufficient free space for journal files というエラーが発生するのはなぜですか?