linux + solaris + 删除文件中除数字和点字符之外的所有字符

linux + solaris + 删除文件中除数字和点字符之外的所有字符

请指教如何删除文件中除数字和“。”之外的所有字符。

  • 应该由 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.

答案1

使用否定组[^.0-9],其含义为除点和数字之外的任何内容。要清理,infile请执行以下操作:

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

编辑

要用一个空格替换否定组的序列,您可以使用更新后的答案。

答案2

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

解释:

  • s/[^.0-9]\+/ /g用一个空格替换连续的其他字符
  • s/^ //g删除前导空格
  • s/ $//g删除尾随空格

相关内容