我有一个像这样的字符串:testfsdfsdftestfsdkflsdtestsdfsdfsdf
我想知道如何分隔字符串,以便testfsdfsdf
出现在第一行,testfsdkflsd
将出现在第二行等,如下所示:
testfsdfsdf
testfsdkflsd
testsdfsdfsdf
我尝试使用sed
findtest
和之后的任何内容,sed 's/test.*/
但我想知道如何test.*
再次重印。据我所知sed
,您可以使用它来查找特定字符串,然后将其替换为其他字符串。所以本质上,我想尝试类似的东西sed 's/test.*/[reprint test.* here]\n/g'
,但如果我这样做sed 's/test.*/test.*\n/g'
,它只会输出test.*
。有什么办法可以重新打印用 找到的字符串sed
,或者可以用另一个命令来完成吗?
我还尝试了 sed 's/\(test.*\)test/\1\ntest/g'
,如果只有两个实例test[random characters]
而不是三个或更多实例,它就可以工作。使用 string testfsdfsdftestfsdkflsdtestsdfsdfsdf
,它只打印:
testfsdfsdftestfsdkflsd
testsdfsdfsdf
你很亲密。你想要的 sed 命令是
它在每个
test
.现在,尽管 GNU sed 和可能的其他人这样做,但POSIX
\n
并未指定换行符的解释。为了使命令可移植,需要一个文字的、转义的换行符,但是,您会注意到 if
test
是该行的前四个字符,就像您的示例一样,这将在输出的开头创建一个空行。如果这不会发生,我们可以使用.
匹配任何字符,因此需要test
之前存在某个字符,否则正则表达式不匹配。即,如果是该行中的第一个字符串,则不能匹配任何内容并且不进行替换。test
.
而对于便携式替代品,
使用 GNU sed 进行的一些测试:
那是因为
.*
它是贪婪的,即它会匹配它所能匹配的所有东西。例如,颜色/匹配从第一个到最后一个
b
的所有内容。