我试图编写一个简单的脚本,它将查找目录中的所有java文件,并显示与某些搜索字符串匹配的所有日志消息。例如,如果java文件中的一行包含" log.info",我想将其粘贴在一个文件中。同样适用于"错误","警告"和"调试"。现在这就是我所拥有的:
<Grid>
<DataGrid ItemsSource="{Binding Students}" AutoGenerateColumns="False" Margin="69,50,47,66">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Name}" Header="Names"/>
<DataGridComboBoxColumn SelectedValueBinding="{Binding Grade, UpdateSourceTrigger=PropertyChanged}" Header="Grades" Width="80">
<DataGridComboBoxColumn.EditingElementStyle>
<Style TargetType="{x:Type ComboBox}">
<Setter Property="ItemsSource" Value="{Binding Grades, Mode=TwoWay , UpdateSourceTrigger=PropertyChanged}"/>
</Style>
</DataGridComboBoxColumn.EditingElementStyle>
</DataGridComboBoxColumn>
<DataGridCheckBoxColumn Binding="{Binding GoodStudent, UpdateSourceTrigger=PropertyChanged}" Header="IsGood" />
</DataGrid.Columns>
</DataGrid>
</Grid>
然后我手动替换&#34; .error&#34;与其他字符串之一。但是,当我尝试稍后分离输出时,grep会添加冒号&#34;:&#34;字段之间的字符,以及一些日志消息还包含&#34;:&#34;字符,所以我的输出变得混乱。我最终得到了:
grep -rn --include \*.java "\b\.error\b" * >> log_strings.csv
大致翻译为:
filename:line_num:log.debug("some message:"+whatever());
有没有办法取代&#34;:&#34; grep产生的字符但忽略字符串中的字符,以便我的java字符串保持井井有条?我想必须有一些东西可以使用sed或awk完成。
答案 0 :(得分:1)
如果要用制表符替换前两个冒号,只需将一个冒号替换两次:
sed 's/:/\t/;s/:/\t/;'
在Perl中,您可以通过在循环中运行它来避免重复替换:
perl -pe 's/:/\t/ while ++$x % 3'