用换行符替换文件中除一组字符之外的所有字符

用换行符替换文件中除一组字符之外的所有字符

如何删除文件中除数字和“.”之外的所有字符,每个单词(数字/点)应该在文件中的新行中,请参见示例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

相关内容