我有许多 .txt 文件,它们的文件名是不同的日期:
01.01.2010.txt
02.01.2010.txt
...
当前每个文件(例如:01.01.2010.txt)如下所示:
0.351 XXX XXX XXX XXX
0.292 XXX XXX XXX XXX
如何将文件名添加到文件的每一行并保持格式?
...对于文件 01.01.2010.txt 来说,它看起来像这样:
01.01.2010 0.341 XXX XXX XXX XXX
01.01.2010 0.122 XXX XXX XXX XXX
.. 对于文件 02.01.2010.txt 来说如下所示:
02.01.2010 0.391 XXX XXX XXX XXX
02.01.2010 1.342 XXX XXX XXX XXX
这些文件存储在子目录中。如果有一行代码可以处理所有这些文件以及子目录,那就太棒了。
- /patch/to/file
-/path/to/file/sub1/
-/path/to/file/sub2/
-/path/to/file/sub3/
答案1
建议使用bash
循环和sed
。例如:
创建测试文件集:
$ for i in $(seq -w 1 10); do echo $i-content > $i.txt; done
组装替换命令:
$ for i in *.txt; do sed -i.bak s/^/$(basename $i .txt)\ /g $i; done
结合find
:
for i in $(find /your/source/directory/ -iname "*.txt" -print)
do sed -i.bak s/^/$(basename $i .txt)\ /g $i; done
这并未针对性能进行优化,因此可能不是完成请求任务的最有效方法。
答案2
您可以使用:
grep -r . .
第一个.
是匹配任意字符的 RegExp 模式。它将匹配所有行。
第二个.
是当前文件夹,但您可以将其替换为任何有效路径。例如:
grep -r . /etc/