假设您有一组单词或者行,它们想要匹配它们并执行某些活动,但您不知道每个单词或者字符串之间的空格数。
该怎么办?
例如,我有一个包含以下内容的文件 /tmp/file
Dec 14 13:29:13 cc01-pgd-002a kernel: Initializing cgroup subsys cpuset Dec 14 13:29:13 cc01-pgd-002a kernel: Initializing cgroup subsys cpu Dec 14 13:29:13 cc01-pgd-002a kernel: Initializing cgroup subsys cpuacct
我想对“初始化cgroup subsys cpuset”进行grep
但我不想因为每个单词之间的空格而冒险
如果我做一个正常的搜索和替换,如下所示:
# sed 's/Initializing cgroup subsys cpuset/NEW CONTENT/g' /tmp/file Dec 14 13:29:13 cc01-pgd-002a kernel: NEW CONTENT Dec 14 13:29:13 cc01-pgd-002a kernel: Initializing cgroup subsys cpu Dec 14 13:29:13 cc01-pgd-002a kernel: Initializing cgroup subsys cpuacct
但如果有多个空格,匹配模式就无效了:
# cat /tmp/file Dec 14 13:29:13 cc01-pgd-002a kernel: Initializing cgroup subsys cpuset Dec 14 13:29:13 cc01-pgd-002a kernel: Initializing cgroup subsys cpu Dec 14 13:29:13 cc01-pgd-002a kernel: Initializing cgroup subsys cpuacct
所以我们必须尽量忽略这些空格,以便我们有一个完美的匹配:
# sed 's/Initializings*cgroups*subsyss*cpuset/NEW CONTENT/g' /tmp/file Dec 14 13:29:13 cc01-pgd-002a kernel: NEW CONTENT Dec 14 13:29:13 cc01-pgd-002a kernel: Initializing cgroup subsys cpu Dec 14 13:29:13 cc01-pgd-002a kernel: Initializing cgroup subsys cpuacct
其中
s 表示空白字符 这相当于[[:blank:]
* 表示0或者更多
所以我们还可以这样匹配:
# sed 's/Initializing[[:blank:]]*cgroup[[:blank:]]*subsys[[:blank:]]*cpuset/NEW CONTENT/g' /tmp/file Dec 14 13:29:13 cc01-pgd-002a kernel: NEW CONTENT Dec 14 13:29:13 cc01-pgd-002a kernel: Initializing cgroup subsys cpu Dec 14 13:29:13 cc01-pgd-002a kernel: Initializing cgroup subsys cpuacct
日期:2020-06-02 22:17:33 来源:oir作者:oir