add filename to beginning of file using find and sed

untested, try using xargs

find . -type f | xargs -I FILE sed "s/^/FILE/g" FILE > out

 find . -type f |xargs awk '$0=FILENAME$0' > out

as I answered this, your "no awk" line not yet there. anyway, take a look my updated answer below:

updated based on comment

so you want to use find, exec/xargs, and sed to do it. My script needs GNU Sed, i hope you have it.

see the one liner first: (well, > out is omitted. You could add it to the end of the line. )

find . -type f | xargs -i echo {}|sed -r 's#(.\/)(.*)#cat &\|sed  "s:^:file \2 :g"#ge'

now let's take a test, see below:

kent$  head *.txt
==> a.txt <==
A1
A2

==> b.txt <==
B1
B2

kent$  find . -type f | xargs -i echo {}|sed -r 's#(.\/)(.*)#cat &\|sed  "s:^:file \2 :g"#ge'
file b.txt B1
file b.txt B2
file a.txt A1
file a.txt A2

is the result your expectation?

Short explanation

  • find ....|xargs -i echo {} nothing to explain, just print the filename per line (with leading "./")
  • then pass the filename to a sed line like sed -r 's#(.\/)(.*)# MAGIC #ge'
  • remember that in the above line, we have two groups \1: "./" and \2 "a.txt"(filename)
  • since we have e at the end of sed line, the MAGIC part would be executed as shell command.(GNU sed needed)
  • MAGIC: cat &\|sed "s:^:file \2 :g cat & is just output the file content, and pipe to another sed. do the replace (s:..:..:g)
  • finally, the execution result of MAGIC would be the Replacement of the outer sed.

the key is the 'e' of Gnu sed.

Tags:

Shell

Find

Sed