Jaf*_*son 10 command-line text-processing
我有一个文件,其中包含包括 url 在内的数据。但是有很多行不是 url。如何使用 Ubuntu 终端命令删除它们?
这是供参考的示例文件:示例数据
com.blendtuts/S
°=
com.blengineering.www/:http
±=
Run Code Online (Sandbox Code Playgroud)
我想要输出:
com.blendtuts/S
com.blengineering.www/:http
Run Code Online (Sandbox Code Playgroud)
多余的不需要的行没有任何点。因此,我想删除没有点的线条
Zan*_*nna 31
一种方式 sed
sed '/\./!d' file
Run Code Online (Sandbox Code Playgroud)
/\./匹配文字点(转义,\因为否则.匹配任何字符)!d 删除除匹配模式之外的所有内容如果要就地编辑文件,请-i在测试后添加到命令中。(您还可以添加.bak到-i标志sed -i.bak ...以创建文件的本地备份。)
sed -i '/\./!d' file
Run Code Online (Sandbox Code Playgroud)
Fl.*_*pf. 26
您可以将带有点的所有内容 grep 到一个新文件中:
grep "\." file > newfile
Run Code Online (Sandbox Code Playgroud)
这样您就可以保存旧文件。
我认为awk是党缺少的最后一个:
$ awk -F\. 'NF>1' file
com.blendtuts/S
com.blengineering.www/:http
Run Code Online (Sandbox Code Playgroud)
这将字段分隔符设置为点。然后,打印那些至少有两个字段的行是一个问题:这意味着至少出现一个点。
小智 6
你可以用 vim 很容易地做到这一点。如果您习惯使用 vim 作为文本编辑器(打开、编辑和写入文件),请执行以下操作:
:g!/\./d
Run Code Online (Sandbox Code Playgroud)
如果您不习惯使用 vim,或者您更愿意将其用作命令行工具,您可以直接从终端执行:
vim file -c "g!/\./d" -c "wq"
Run Code Online (Sandbox Code Playgroud)
您可以稍微修改它以保存到新文件:
vim file -c "g!/\./d" -c "w newfile" -c "q!"
Run Code Online (Sandbox Code Playgroud)
这使用 vim 的“全局”命令,它将 ex 命令应用于匹配(或不匹配)正则表达式的每一行。在这种情况下,命令是“(d)elete”,它将应用于每个不匹配正则表达式的命令\.