Find
如何將文件名作為前綴添加到文本文件的每一行?(批處理;子目錄)
我有許多 .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/
建議使用
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
這並未針對性能進行優化,因此可能不是執行請求任務的最有效方式。
您可以使用:
grep -r . .
第一個
.
是匹配任何字元的正則表達式模式。它將匹配所有行。第二個
.
用於目前文件夾,但您可以將其替換為任何有效路徑。例如:grep -r . /etc/