新しいアイテムを挿入するときにリスト番号を再割り当てする

新しいアイテムを挿入するときにリスト番号を再割り当てする

番号付きのエントリを含むテキストファイルがあります。

1. foo
2. bar 100%
3. kittens
4. eat cake
5. unicorns
6. rainbows

そして大きな数字が出るまで続く。その後、空行の後に新しいブロックが1から始まります。

たとえば、4を置き換えて新しい項目を挿入します。そして、ブロック内のすべての後続の項目に番号を付け直す必要があります。

1. foo
2. bar 100%
3. kittens
4. sunshine <
5. eat cake
6. unicorns
7. rainbows

答え1

いつでも構文を使用して新しい項目を追加し、次の項目を使用してx. newentryすべての項目の番号を変更できます。

awk -F . -v OFS=. '{if (NF) $1 = ++n; else n = 0; print}'
  • -F .:フィールド区切り記号を.1に設定
  • -v OFS=.:同じ出力フィールド区切り記号(-F .の略語-v FS=.)。
  • {...}:いいえ状況したがって、内部コードは{...}各行で実行されます。
  • if (NF)、フィールド数が0より大きい場合。FSbeingの場合、.これは現在の行に少なくとも1つが含まれているかどうかを意味します.if (length)空でない行を確認することもできます。
  • $1 = ++n:最初のフィールド増分を設定しますn(最初は0、次に1、次に2...)。
  • else n = 0:else(NF == 0の場合)nを0にリセットします。
  • print:(修正できる)行を印刷します。

1構文はありますが、-F <extended-regular-expression>単一<extended-regular-expression>文字の場合は正規表現(.すべての文字が表示されている場合)として扱われず、その文字として扱われます。

答え2

以下は、最大致死率(および複雑さ!とバグ!)を達成するのに役立ちます。テキスト::自動書式パールモジュール。

% < input                                                                    
1. foo
2. bar 100%
3. kittens
4. it is getting dark. there may be a grue
4. no seriously, it's getting dark
4. really, you should find a light or something.
4. are you even paying attention? helloooo
4. eat cake
5. unicorns
6. rainbows
% perl -MText::Autoformat -0777 -ple '$_=autoformat $_, { all => 1 }' < input
 1. foo
 2. bar 100%
 3. kittens
 4. it is getting dark. there may be a grue
 5. no seriously, it's getting dark
 6. really, you should find a light or something.
 7. are you even paying attention? helloooo
 8. eat cake
 9. unicorns
10. rainbows
% 

実際の結果は、入力、目的の出力、渡されるオプションなどによって異なります。

答え3

VIMソリューション

2つの回避策があります。 1つはCtrla選択項目で自動的にキーを押すことで、2番目はsubmatch(0)+1選択項目でモード交換を実行することです。最初は重要な自動化です。

リストを作成して開始します。

1. foo
2. bar 100%
3. kittens
4. eat cake
5. unicorns
6. rainbows

アイテムを挿入する

1. foo
2. bar 100%
3. kittens
4. eat cake
4. sunshine
5. unicorns
6. rainbows

4. sunshineコマンドモードの上にカーソルを置き、shift+を押してvからshift+を押しますg。ファイルの最後までの視覚的な選択です。一般的な方法でカーソルをブロックの末尾に移動することもできます。

を押して:コマンドモードに入ると、次のようになります:'<,'> 。次に、次のように入力します。

norm Ctrl+ V Ctrl+A

Ctrl-vとCtrl-Aの機能は、「正しい」キーを入力できるようにすることで^A強調表示されます。これはデフォルトでと言われ、for all lines selected, execute in normal mode keypress Ctrl-ACtrl-Aはデフォルトでカーソルの下の数字を増やします。数字が変わるのを見ることができます。

実際のソリューション:

今後

ここに画像の説明を入力してください。

後ろに

ここに画像の説明を入力してください。


Shiftv別の方法は、before( , then ) のように最初に繰り返される数字からすべての項目を選択し、Gコマンドモードで実行することです。

:'<,'>s/\v(^\d+)\./\=(submatch(0)+1).'.'/ 

答え4

番号を削除:cut -d" " -f2- < list.txt > temp.txt

temp.txtに行を挿入する

数字を作る:cat -n temp.txt| sed -e 's/^[ ]*\([0-9]*\)[ \t]*\(.*\)/\1. \2/' > list.txt

関連情報