迭代包含某些字符串的文件并将该字符串放入新文件中

时间:2016-12-15 13:03:13

标签: bash shell scripting

我的文件包含两行总是盯着foobar后跟一个冒号,一个空格和一个固定长度的字符串(可以包含大写字母A-Z,数字{{ 1}}和0-9):

<

我想迭代每个文件,连接foo: PF29273467<<<<<<<< bar: CLPERJD<<<<<122111 foo的字符串,并将这个新字符串作为新行添加到文本文件中,前面是字符串文件中的文件名起源和空间。

因此,当迭代一组3个文件(file1.x,file2.x,file3.x)时,新文本文件的内容将是:

bar

我对bash脚本并不太熟悉,所以直到现在我所能提出的是迭代文件并打印包含file1.x PF29273467<<<<<<<<CLPERJD<<<<<122111 file2.x FLOEH73443<<<<1<<<CROEKJF<<<<<1F2122 file3.x IRHDS72455<<<<23<<XXXSDWR<<<<<122111 的行     #!/斌/庆典

foo:

1 个答案:

答案 0 :(得分:1)

使用perl regEx,我就能实现这一目标。

#!/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

可以对perl regEx进行更好的优化,使其成为单一捕获。