web-dev-qa-db-ja.com

vimで最初の列を削除する

テキストファイルがあります。

number 1_1 \t number1_2 \t etc
number 2_1 \t number2_2 \t etc

このファイルの最初の列(number1_1、number2_1などに対応、つまり各行の最初のタブの前の数字)を削除したい。 この投稿 を読んで、最初の列を削除する解決策を提案します(Peterの答えを参照)。ただし、数字のサイズが異なるため、機能しません。最初の列を削除する操作を繰り返すことはできません。どうすればできますか?

7
bigTree

これにより、任意の行の最初のタブを含むすべての文字が削除されます。

:%s/^[^\t]*\t//

コマンドラインcut

cut -f 2- {filename.txt} > {filenamenew.txt}

デフォルトをタブにカットします。スペースのような何かが必要な場合は、-d " "を追加します。 -fは、コピーするフィールドです。 2-は、列2のすべて(および列2を含む)を意味します。

6
Rinzwind

awkを通じて、

awk -F"\t" '{print FS,$2}' file > newfile

最初の列を切り取り、残りのタブと2番目の列のみを印刷します。

sedを通じて、

sed -r 's/^([^\t]*)\t(.*)$/\t\2/g' file > newfile
4
Avinash Raj

:%s/[^\t]*\t//

すべての行(%)で、最初に出現する「非タブ文字(s/ORIGINAL/REPLACEMENT/、任意の数([^\t])」に続いてタブを(*)置​​き換えます\t”何もありません。入力できます Tab \tの代わりに。

または、タブで終わる文字の最短シーケンス(.\{-})と一致させることもできます。 .*\t.*の最長一致に一致するため、最後の列を除くすべてに一致します。 .\{-}は、最初の列である最短一致に一致します。

:%s/.\{-}\t//

3
Gilles

Viで(スペースで区切られた)最初の列を削除するには、次のようにします。

:%norm dW

で区切られた列の Tab、それは:

:%norm dfCtrl+VTab

したがって、ファイルから最初の列を削除するコマンド(インプレース)は次のようになります。

ex +"%norm df$(echo -e '\t')" -scwq file

保存(ドライラン)の前に出力を確認するには、-scwq-sc'%p|q!'に置き換えます。

または クリスの提案 に基づいて、次のようになります:

ex -c':exe ":%norm df\<Tab>"' -sc'%p|q!' <(echo -e "a a\tb b\tc c")

または、視覚モードで実行します(左上から開始する場合):

  1. 視覚ブロックを入力してください Ctrl+v
  2. 最後にジャンプし、次を押して最初の列を選択します。 G、 E (または手動で調整)。
  3. 押す d 選択したブロックを削除します。
3
kenorb

2番目の列の前に残っているスペースを削除するには、以下をお勧めします。

:%norm dfCtrl+VTabx

0
SergioAraujo