在每行的开头添加带有文件名的字符串

时间:2018-06-28 14:09:32

标签: linux shell freebsd

我无法在bash中找到解决此问题的简便方法。

我有几个文件: aaa.txt / bbb.txt / ccc.txt

每个文件的内容是:

aaa.txt

    1234
    1234
    1234

bbb.txt

    5678
    5678
    5678

ccc.txt

    10
    20
    30
    40

我需要使用循环将文件名添加到每一行的开头。

大约有300个文件,我想将它们全部合并在一个文件中以执行grep,而不是逐文件查找文件,添加文件名的原因是执行该grep。结果应该是:

aaa.txt

    aaa: 1234
    aaa: 1234
    aaa: 1234

bbb.txt

    bbb: 5678
    bbb: 5678
    bbb: 5678

ccc.txt

    ccc: 10
    ccc: 20
    ccc: 30
    ccc: 40

你能帮我吗?

如果有任何疑问,只要求

谢谢!

2 个答案:

答案 0 :(得分:0)

使用-H选项,该选项为搜索到的每一行添加文件名前缀。 ^匹配每一行的开头:

grep -H ^ *.txt > bigfile.txt

请注意,这样做:

grep -H ^ *.txt > bigfile.txt
grep searchstring bigfile.txt

...可以简化为:

grep -H searchstring *.txt

...效率大约是它的两倍。

答案 1 :(得分:0)

是的,agc所说的是可行的:

cd / some / path / && grep -H ^ * .txt> /some/path/bigfile.txt

谢谢大家!