Linux
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.
使用否定組
[^.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
刪除尾隨空格