在单独的文件中提取具有特定模式的行

doc*_*doc 4 regex perl awk sed pattern-matching

输入文件具有以下行,并使用一个文件中的第二个字段"+"符号行和另一个文件中的" - "符号行来隔离它们:

24 +  I am the Five man    
22 -  Who are you?  The new number two!    
51 +  . . . And four on the floor    
42 +    
16 -  Who is number one?    
33 -  I three you.
Run Code Online (Sandbox Code Playgroud)

当2美元是'+',a = $ 1 + 500和b = $ 1-500时,$ 2是' - ',a = $ 1-500,b = $ 1 + 500?'a'和'b'是新变量.

iru*_*var 5

另外一个选项

awk 'BEGIN{m["+"]="plus.txt";m["-"]="minus.txt"} $2 ~ /^[+-]$/{print>>m[$2]}' 
Run Code Online (Sandbox Code Playgroud)


per*_*eal 5

使用Perl:

perl -lne '/^\d+ -/ && print(STDERR) || print' input 2> minus > plus
Run Code Online (Sandbox Code Playgroud)

形式略有不同:

perl -lpe 'select(/^\d+ -/?STDERR:STDOUT)' input 2> minus > plus
Run Code Online (Sandbox Code Playgroud)

也可以使用tee:

tee >(sed -n '/^[0-9]* -/p' > minus) < input | \
   sed -n '/^[0-9]* +/p' > plus
Run Code Online (Sandbox Code Playgroud)