【发布时间】:2021-05-11 08:30:06
【问题描述】:
我已经学习 SED 和 GREP 几个星期了。通常我使用 ATOM 编辑器来构建正则表达式,它对我有很大帮助。现在我只需要几分钟就可以买一个。
但是当我尝试使用 ubuntu 终端对数据文件使用相同的正则表达式时,事情开始变得丑陋。
有人能否提供带有 grep 和 sed 的精确开关,但也有限制(例如 - GNU SED 不能将 \d 用于数字,而是使用 [0-9])。
让我们看看下面的文本和要求例如:
192.168.10.10,fe80:0:0:0:bcf6:c04e:cb99:6909,10.0.170.11
172.16.32.44
fe80:0:0:0:84a5:1d2e:55d1:ecf,192.168.4.50
fe80:0:0:0:84a5:1d2e:55d1:ec1
10.10.101.22
经过几个小时的努力,我可以找出grep -P '(\d{1,3}\.){3}\d{1,3}' 来打印唯一的 IPV4 地址。但这是 PERL 正则表达式开关。所以现在我对使用什么和不使用什么感到非常困惑。
请帮助我为以下要求构建完整的 SED 和 GREP 命令(假设输入是一个文件):
1- Print only IPV4 addresses using GREP.
2- Print everything except IPV4 addresses using GREP.
3- Print only IPV4 addresses using SED.
4- Print everything except IPV4 addresses using SED.
5- Replace IPV4 addresses with --- using SED.
6- Replace everything except IPV4 addresses using SED.
【问题讨论】:
-
sed不是此任务的最佳选择。您可以为 ip4 地址执行类似sed -nE 's/^/\t/; s/[^.0-9]/\t/g; s/$/\t/; s/\t[^.]*\t/\t/g; s/\t([0-9.]*)\t/\1\n/g;p' ur_file | sed -n '/[0-9]/p'的操作 -
用
sed和grep做同样的任务有什么意义?没有“魔术开关”可以用 grep 替换 sed 或用 sed 替换 grep。Replace everything except IPV4 addresses using SED替换成什么? -
我记得 sed 用于打印,但不确定如何在其中添加正则表达式-
cat somefile | sed -rn '/(expression-here)/p'