忽略引号grep之间的字符

时间:2016-07-12 17:10:48

标签: regex bash awk sed grep

我试图编写一个简单的脚本,它将查找目录中的所有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完成。

1 个答案:

答案 0 :(得分:1)

如果要用制表符替换前两个冒号,只需将一个冒号替换两次:

sed 's/:/\t/;s/:/\t/;'

在Perl中,您可以通过在循环中运行它来避免重复替换:

perl -pe 's/:/\t/ while ++$x % 3'