请指教如何删除文件中除数字和“。”之外的所有字符。
- 应该由 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
删除尾随空格