如何删除文件中除数字和“.”之外的所有字符,每个单词(数字/点)应该在文件中的新行中,请参见示例2
- 解决方案可以使用 sed 或 awk 或 ksh 语法
备注 - 解决方案必须根据示例 2
示例1
编辑前的文件
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.
删除除数字和“.”之外的所有字符后的文件示例 2宪章,每个新词将换行
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
这是经典tr
用例,所以最简单的方法是:
tr -cs '[:digit:].' '[\n*]' < input > output
参数[:digit:].
指定要匹配的字符(数字和点)。指定[\n*]
要替换的字符(用换行符替换所有内容)。该-c
选项反转第一个参数,因为我们想要除数字和点之外的所有内容。-s
将第二个字符串中的连续换行符压缩为一个。
答案2
grep 可以做到:
grep -o '[0-9.]\+'
答案3
您可以使用sed
将任何不需要的字符替换为换行符,然后grep
删除空行:
sed 's/[^0-9.]/\n/g' | grep .
请注意,结果与您发布的结果不同:32 5.500.5.5
分为两行以及最后一行。
Perl 解决方案:它将每一行分割为不需要的字符,并 grep 查找非空行。
perl -ne 'print "$_\n" for grep /./, split /[^0-9.]+/'
答案4
在 RHEL7 上:
替换以 VALUETOEDIT 开头的任何行
sed -i -e 's/^VALUETOEDIT.*/NEWVALUE/g' somefile