2016-12-15 54 views
0

我有一個包含兩行始終與foobar後跟一個冒號,一個空格和一個固定長度的字符串盯着文件文件(可以包含大寫字母A-Z,數字0-9<):遍歷包含某些字符串並把該字符串在一個新的文件

foo: PF29273467<<<<<<<< 
bar: CLPERJD<<<<<122111 

我想遍歷每個文件,從foobar在連接字符串和這個新的字符串追加爲一個文本文件中的新線,從該文件前面加名字符串的起源和空間。

所以遍歷一組3個文件(file1.x,file2.x,file3.x)時,新的文本文件的內容將是:

file1.x PF29273467<<<<<<<<CLPERJD<<<<<122111 
file2.x FLOEH73443<<<<1<<<CROEKJF<<<<<1F2122 
file3.x IRHDS72455<<<<23<<XXXSDWR<<<<<122111 

我不是太熟悉的bash腳本,所以到現在爲止我能想出這是遍歷文件和打印包含foo: #!/斌/慶典

for f in *.x; do 
if grep -q foo: "$f"; then 
    cat $f | grep foo: 
fi 
done 

回答

1

使用perlregEx行,我能做到這一點。

#!/bin/bash 

for file in *.x 
do 
    fooOP=$(perl -lne 'print "$1" if/^foo:\s(.*)$/' "$file") 
    barOP=$(perl -lne 'print "$1" if/^bar:\s(.*)$/' "$file") 
    printf "%s %s%s\n" "$file" "$fooOP" "$barOP" 
done > newfile 

在看到輸出文件

$ cat newfile 
file1.x PF29273467<<<<<<<<CLPERJD<<<<<122111 
file2.x FLOEH73443<<<<1<<<CROEKJF<<<<<1F2122 
file3.x IRHDS72455<<<<23<<XXXSDWR<<<<<122111 

更好的優化可以在perlregEx做才能把它作爲一個單一的捕獲。

相關問題