1

ファイルが現在のディレクトリまたはサブディレクトリにある、指定された複数のタイプファイルの先頭に行を挿入したい。

私はそれを使用することを知っています

find . -name "*.csv"

挿入に使用するファイルをリストするのに役立ちます。

と使用

sed -i '1icolumn1,column2,column3' test.csv

ファイルの先頭に 1 行を挿入するために使用できます。

しかし、「find」コマンドから「sed」コマンドにファイル名をパイプする方法がわかりません。

誰か私に何か提案をしてもらえますか?

または、これを行うためのより良い解決策はありますか?

ところで、これを1行のコマンドで行うのはうまくいきますか?

4

2 に答える 2

2

の出力とコマンドライン引数を次のコマンドxargsに渡すために使用してみてください。findsed

find . -type f -name '*.csv' -print0 | xargs -0 sed -i '1icolumn1,column2,column3'

別のオプションは、の-execオプションを使用することですfind

find . -type f -name '*.csv' -exec sed -i '1icolumn1,column2,column3' {} \;

注 :xargsより効率的な方法であり、オプションを使用して複数のプロセスを処理できることが確認されてい-Pます。

于 2013-11-12T05:56:09.870 に答える
2

こちらです :

find . -type f -name "*.csv" -exec sed -i '1icolumn1,column2,column3' {} +

-execここですべての魔法を行います。の関連部分man find:

   -exec command ;
   Execute  command;  true  if  0  status  is returned.  All following arguments
   to find are taken to be arguments to the command until an argument consisting
   of `;' is encountered.  The string `{}' is replaced by the current file name
   being processed everywhere it occurs in the arguments to the command, not just
   in arguments where it is alone, as in some versions  of find.   Both  of  
   these constructions might need to be escaped (with a `\') or quoted to protect
   them from expansion by the shell.  See the EXAMPLES section for examples of
   the use of the -exec option.  The specified command is run once for each
   matched file.  The command is executed in the starting directory.   There
   are unavoidable security  problems  surrounding use of the -exec action;
   you should use the -execdir option instead
于 2013-11-12T05:54:33.883 に答える