bash将行组移动到新文件

时间:2016-03-16 18:31:33

标签: bash

在bash脚本中,我让phpcpd检查整个代码库并输出到文件。我当时想要创建新文件,详细说明特定文件的重复代码。

phpcpd的输出包含n行的组,将这些行分隔为空行。

我正在尝试添加到我的bash脚本中以复制与模式匹配的所有行组($ FILENAME),并将剩余数据放入新文件中。

我不确定如何执行此操作并且没有代码示例。

编辑,例如;

用于搜索模式的

文件包含类似于以下内容的内容;

/home/dir/fileName1
/home/dir/fileName2
/home/dir/fileName3

/home/dir/fileName4
/home/dir/fileName5

/home/dir/fileName1
/home/dir/fileName6

然后我想说我要搜索fileName1,一个名为fileName1Results的新文件应该包含以下内容;

/home/dir/fileName1
/home/dir/fileName2
/home/dir/fileName3

/home/dir/fileName1
/home/dir/fileName6

1 个答案:

答案 0 :(得分:1)

根据示例编辑:快速perl执行您想要的操作,将行分隔符设置为空行,读取FILENAME变量并写入$ {FILENAME}结果文件。

$ cat infile
/home/dir/fileName1
/home/dir/fileName2
/home/dir/fileName3

/home/dir/fileName4
/home/dir/fileName5

/home/dir/fileName1
/home/dir/fileName6
$ FILENAME=fileName1
$ perl -se '$/ = "\n\n"; while (<>) { print $_ if /\Q$f\E/; }' -- -f="$FILENAME" > "${FILENAME}Results" <infile
$ cat "${FILENAME}Results"
/home/dir/fileName1
/home/dir/fileName2
/home/dir/fileName3

/home/dir/fileName1
/home/dir/fileName6

编辑:调整以处理特殊字符(如果你的文件名中有这些字符)。