Find

如何將文件名作為前綴添加到文本文件的每一行?(批處理;子目錄)

  • August 3, 2019

我有許多 .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/

引用自:https://serverfault.com/questions/977831