如何获取包含一个模式而不包含另一个模式的所有文件的列表?

时间:2018-02-21 15:27:41

标签: bash grep

我正在寻找一个CLI,它会返回一个包含CustomTextBox Class: public class CustomTextBox : TextBox { protected override void OnKeyDown(KeyEventArgs e) { base.OnKeyDown(e); } } 文本且内部不包含MainWindow: <Window x:Class="WpfApp2.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:WpfApp2" mc:Ignorable="d" Title="MainWindow" Height="350" Width="525"> <Window.Resources> <Style x:Key="CustomTextBoxStyle" TargetType="{x:Type local:CustomTextBox}"> <Setter Property="Foreground" Value="#FF414042" /> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type local:CustomTextBox}"> <Border Name="Border" BorderBrush="#FF348781" BorderThickness="0,0,0,4" CornerRadius="2"> <ScrollViewer x:Name="PART_ContentHost" Margin="0" /> <VisualStateManager.VisualStateGroups> <VisualStateGroup x:Name="CommonStates"> <VisualState x:Name="Normal" /> <VisualState x:Name="Disabled" /> <VisualState x:Name="ReadOnly" /> <VisualState x:Name="MouseOver" /> </VisualStateGroup> </VisualStateManager.VisualStateGroups> </Border> </ControlTemplate> </Setter.Value> </Setter> </Style> <Style TargetType="{x:Type local:CustomTextBox}" BasedOn="{StaticResource CustomTextBoxStyle}"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type local:CustomTextBox}"> <Grid> <local:CustomTextBox Text="{TemplateBinding Text}" x:Name="textSource" Background="Transparent" Panel.ZIndex="2" Style="{StaticResource CustomTextBoxStyle}"/> <TextBlock Text="{TemplateBinding Tag}"> <TextBlock.Style> <Style TargetType="{x:Type TextBlock}"> <Setter Property="Foreground" Value="Transparent" /> <Style.Triggers> <DataTrigger Binding="{Binding Path=Text, Source={x:Reference textSource}}" Value=""> <Setter Property="Foreground" Value="Gray" /> </DataTrigger> </Style.Triggers> </Style> </TextBlock.Style> </TextBlock> </Grid> </ControlTemplate> </Setter.Value> </Setter> </Style> </Window.Resources> <Grid> <local:CustomTextBox x:Name="CTbox" Tag="Hint Text Example" Height="25" Width="258"/> </Grid> </Window> 的文件列表。

请注意我正在寻找便携式解决方案,请记住GNU和非GNU版本的awk / grep /...

之间的差异

如果它可以在一个命令中,甚至更好。

2 个答案:

答案 0 :(得分:3)

您可以使用此find + awk解决方案:

find . -maxdepth 1 -type f -exec \
awk '/foo/{m=1} /bar/{n=1} END{if (m && !n) print FILENAME}' {} \;

答案 1 :(得分:1)

这将在第一场比赛中停止grep,但确实涉及两次读取同一文件。

find . -type f -exec bash -c 'if grep -q -m1 foo $0 && ! grep -q -m1 bar $0; then echo $0; fi' {} \;