backup
ファイル拡張子というディレクトリがあります*.sql
。私が望むのは、ディレクトリ内のすべてのSQLファイルの前に1行を追加することですbackup
。
そうしましたが、echo 'use my_db;' >> backup/*.sql
成功しませんでした。
次のことを試しましたが、次に何をすべきかわかりません。
ls backup/*.sql | xargs echo "use my_db;"
その行を前に追加するソリューションはありますか?
答え1
GNUの使用sed
:
for sql in backup/*.sql; do
sed -i '1i\use my_db;' "$sql"
done
標準sed
:
for sql in backup/*.sql; do
sed '1i\
use my_db;
' "$sql" >"$sql.bak" && mv "$sql.bak" "$sql"
done
.sql
これにより、その中にあるすべてのファイルをすぐに編集できますbackup
。編集コマンドは、各ファイルの最初の行の前に1行を挿入します。
これは、パターンがbackup/*.sql
編集したいファイルとのみ一致すると仮定します。
使用echo
とcat
:
for sql in backup/*.sql; do
{ echo 'use my_db;'; cat "$sql"; } >"$sql.tmp" && mv "$sql.tmp" "$sql"
done
このループでは、最初にファイルに追加する行を出力してから、ファイルの内容を出力します。これは一時ファイルに移動し、名前が変更されます。
注文する
echo 'use my_db;' >> backup/*.sql
次のように拡張されます。
echo 'use my_db;' >> backup/file1.sql backup/file2.sql backup/file3.sql
これは次のとおりです。
echo 'use my_db;' backup/file2.sql backup/file3.sql >> backup/file1.sql
その後、与えられた文字列がbackup/file1.sql
。
2番目のコマンドはファイルを変更しません。
答え2
解決策
sed -i '1 i\use my_db' backup/*.sql
説明する
sed -i
ファイルの変更を保持して書き込まないでくださいstdout
。
1
-sed
最初の行にあるとき。
i
- 次の行を挿入してください。
backup/*.sql
実行するファイルですsed
。
答え3
フォルダ内の各ファイルを繰り返すことができます。
for item in $(ls backup/ | grep "*.sql")
do
echo "use my_db;" >> $item
done