【问题标题】:Iterating over files containing certain string and putting that string in a new file遍历包含特定字符串的文件并将该字符串放入新文件中
【发布时间】:2016-12-15 21:31:54
【问题描述】:

我的文件包含两行总是以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: 的行 #!/bin/bash

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

【问题讨论】:

    标签: bash shell scripting


    【解决方案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 进行更好的优化,将其作为单个捕获。

    【讨论】:

      猜你喜欢
      • 2020-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多