如何从文件中删除不包含点的行?


10

我有一个包含包含URL的数据的文件。但是有很多行不是url。如何使用Ubuntu终端命令删除它们?

这是示例文件供参考:示例数据

com.blendtuts/S
°=
com.blengineering.www/:http
±=

我想要输出:

com.blendtuts/S
com.blengineering.www/:http

多余的多余线条没有任何点。因此,我想删除没有点的线

Answers:


30

一种方式 sed

sed '/\./!d' file
  • /\./匹配文字点(转义为\,否则会.匹配任何字符)
  • !d 删除匹配模式以外的所有内容

如果要在适当位置编辑文件,请-i在测试后添加到命令中。(您也可以添加.bak-i标志sed -i.bak ...以创建文件的本地备份。)

sed -i '/\./!d' file

26

您可以将所有带有点的grep放入新文件中:

grep "\."  file > newfile

这样,您可以保存旧文件。



8

我认为这awk是党的最后一个失踪案:

$ awk -F\. 'NF>1' file
com.blendtuts/S
com.blengineering.www/:http

这会将字段分隔符设置为点。然后,只需打印至少包含两个字段的行:这将意味着至少出现一个点。


3
一个更简单的awk解决方案是按照与grep相同的方式进行:awk '/\./' file-即仅打印包含字符“。”的行。
克里斯·米德利

@ChrisMidgley好一个!由于这是grep已经提出的答案,所以我更喜欢使用一些awk特定的东西:)
fedorqui

6

使用perl:

perl -i -ne 'print if /\./' /path/to/file

6

您可以使用vim轻松完成此操作。如果您愿意将vim用作文本编辑器(打开,编辑和写入文件),请执行以下操作:

:g!/\./d

如果您不习惯使用vim,或者希望将其用作命令行工具,则可以在终端上进行操作:

vim file -c "g!/\./d" -c "wq"

您可以稍作修改以保存到新文件:

vim file -c "g!/\./d" -c "w newfile" -c "q!"

这使用了vim的“全局”命令,该命令将ex命令应用于与正则表达式匹配(或不匹配)的每行。在这种情况下,该命令为“(d)elete”,它将应用于与正则表达式不匹配的每个命令\.

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.