【问题标题】:Add string at the beginning of each line with the name of the file [duplicate]在每行的开头添加带有文件名的字符串[重复]
【发布时间】:2018-12-07 15:54:31
【问题描述】:

我在 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

你能帮帮我吗?

如果有任何疑问,请询问

谢谢!

【问题讨论】:

  • grep -e ".*" * > result 和 grep 将在行首添加文件名。但是你也可以立即 grep,可能
  • 您可以使用grep -H 强制使用文件名进行grep 结果。您没有讨论 如何 您当前正在使用 grep,但我认为这可能会有所帮助:如果您正在执行类似 for file in *; do grep "$pattern" "$file"; done > result 的操作,则将 -H 扔进去以获取文件名结果文件。

标签: linux shell freebsd


【解决方案1】:

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

grep -H ^ *.txt > bigfile.txt

注意这样做:

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

...可以简化为:

grep -H searchstring *.txt

...效率也提高了大约两倍。

【讨论】:

    【解决方案2】:

    是的,agc 说的是有效的:

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

    谢谢大家!

    【讨论】:

      猜你喜欢
      • 2013-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-07
      • 1970-01-01
      • 2019-12-16
      • 1970-01-01
      相关资源
      最近更新 更多