2015-11-17 36 views
7

我如何在vi中執行此操作?vi只保留列的前10個字符

awk -F"," awk '{print substr($1,1,10)}' 

我只想保留日期列的前10個字符(例如2014-01-01)並且不包含時間戳。

我試圖做到這一點在awk的,但我得到這個錯誤:

sed: RE error: illegal byte sequence 

我相信這是一個.bash_profile中設置錯誤。

這就是我在我的.bash_profile:

#export LANG=en_US.UTF-8 
#export LOCALE=UTF-8 

export LC_CTYPE=C 
export LANG=C 
+1

'awk'產生錯誤信息'sed:RE error:非法字節序列'是極不可能的。清理你的問題是準確的,並顯示樣本輸入和期望的輸出。無論如何,你爲什麼要用'vi'來做到這一點? –

+0

如果你的語言環境有問題,你可以嘗試'LC_ALL = C awk'{print substr($ 0,1,10)}'file> output'。 – ryuichiro

回答

9
在vim

,做到:

:%norm! 11|D 

這會影響你的緩衝區中的所有行。

如果你願意,:s也可以做這份工作。

+0

你在哪裏指定列? – jxn

+3

@jxn在上面的命令中有一個魔術數字「11」。這可能意味着什麼? –

+0

也許在給定的情況下'10l'比'11''更容易# –

5
:%s/.\{,10}\zs.*// 

  • :%s/:替代適用於所有的線
  • .\{,10}匹配任何高達10倍(貪婪)
  • \zs:表示比賽開始
  • .* :匹配其餘行
  • /:的:s
  • /第一部分的結束:中s第二部分結束(因爲有兩個/之間沒什麼,更換什麼,即刪除)
4

對於文本的編輯塊的有一個-- VISUAL BLOCK --模式可通過CTRL-V訪問(在Windows上通常爲CTRL-Q)。然後您可以按d刪除您的選擇。

或者用一個簡單的替代命令

:%s/\%>10c.*// 
  • \%>10c - 比賽第十列
  • .後 - 匹配任何單個字符,但不是一個結束的行
  • * - 匹配0或更多前面的原子,儘可能多

或者您可以使用範圍

:1,3s/\%>10c.*// 

這將替代前三行。

相關問題