Linux

linux + solaris + 刪除文件中除數字和點字元外的所有字元

  • November 15, 2012

請建議如何刪除文件中除數字和“。”之外的所有字元

  • 應該由 sed 或 awk 或 perl ( 一行 ) 或任何其他想法來實現,所以我將在我的 ksh 腳本中添加語法

備註 - 解決方案必鬚根據目標文件中的範例(參見本範例中的空格),因此其他字元(非點或數字)將被替換為一個空格。

例如原始文件:

 192.0.22.1++0.1
 e32)5.500.5.5*kjcdr
 ##@$1.1.1.1+++jmjh
 1.1.1.1333
 33331.1.1.1
 @5.5.5.??????
 ~3de.ede5.5.5.5
 1.1.1.13444r54
 192.9.30.174
 &&^#%5.5.5.5
 :5.5.5.5@%%^^&*
 :5.5.5.5:
 **22.22.22.22
 172.78.0.1()*5.4.3.277
 3.3.3ki.3.

刪除除數字和“.”以外的所有字元後的目標文件 憲章

 192.0.22.1 0.1
 32 5.500.5.5
 1.1.1.1
 1.1.1.1333
 33331.1.1.1
 5.5.5.
 . 5.5.5.5
 1.1.1.13444 54
 192.9.30.174
 5.5.5.5
 5.5.5.5
 5.5.5.5
 22.22.22.22
 172.78.0.1 5.4.3.277
 3.3.3 .3.

使用否定組[^.0-9],表示除點和數字之外的任何內容。要清理infile,請執行以下操作:

sed 's/[^.0-9][^.0-9]*/ /g' infile

編輯

要將否定組的序列替換為一個空格,您可以使用更新的答案。

sed 's/[^.0-9]\+/ /g;s/^ //g;s/ $//g' in-file > target-file

解釋:

  • s/[^.0-9]\+/ /g用一個空格替換連續的其他字元
  • s/^ //g刪除前導空格
  • s/ $//g刪除尾隨空格

引用自:https://serverfault.com/questions/448983