如何在文件的每个匹配读取上拆分一条线

时间:2016-06-09 06:57:44

标签: linux bash shell cygwin

一种新的linux学习者,需要你的帮助。 这段代码

sed 's/regexp/&\n/g' file.txt

仅在第一次匹配时起作用,仅在第一次匹配时输出,然后停止读取剩下的行。

如果我想继续阅读该行直到结束并在每场比赛中将线移至新线怎么办?

例如,我有一个如下所示的日志文件

some text here Critical and some text here Critical and again some text here Critical.

我想像以下一样打破它

some text here
Critical and some text here
Critical and again some text here

2 个答案:

答案 0 :(得分:1)

您必须使用g进行全局更改。

FROM ( SELECT ( { [Plan type].[Plan type].&[100000002] } ) ON COLUMNS 
FROM ( SELECT ( STRTOSET(@ProducersName, CONSTRAINED) ) ON COLUMNS 
FROM ( SELECT ( STRTOSET(@CalendarTime, CONSTRAINED) )  ON COLUMNS 
FROM ( SELECT ( LEFT([Product].[Product code],3) <> 'ALE')  ON COLUMNS --codes that I want to filter out
FROM ( SELECT ( LEFT([Product].[Product code],3) <> 'DBN' )  ON COLUMNS
FROM ( SELECT ( LEFT([Product].[Product code],3) <> 'DBR' )  ON COLUMNS
FROM [Sales]))))))

虽然这会起作用,但我建议你使用它:

echo "some text here Critical and some text here Critical and again some text here Critical." | sed -e 's:Critical:\nCritical:g'

其中&gt;是提示字符。你不必使用它。你会得到的。这是使用sed更改新行的便携方式。所有其他方式都不便携。

从文件中读取:

echo "some text here Critical and some text here Critical and again some text here Critical." | sed -e 's:Critical:\
> Critical:g'

答案 1 :(得分:1)

你可以试试这个Perl单线:

cat file.txt | perl -ne 'chomp; @y = split(/Critical/, $_); print join("\nCritical", @y) . "\n"'

这假设file.txt的内容只是如你所示的一条长行:

some text here Critical and some text here Critical and again some text here

输出:

some text here 
Critical and some text here 
Critical and again some text here