我有一个名为backup文件扩展名的目录*.sql。我想要做的是在目录中的所有 sql 文件前添加一行backup。
我做了echo 'use my_db;' >> backup/*.sql,这没有用。
我尝试了以下但不知道下一步该怎么做:
ls backup/*.sql | xargs echo "use my_db;"
Run Code Online (Sandbox Code Playgroud)
任何解决方案要前置一个行?
Kus*_*nda 18
使用 GNU sed:
for sql in backup/*.sql; do
sed -i '1i\use my_db;' "$sql"
done
Run Code Online (Sandbox Code Playgroud)
标准sed:
for sql in backup/*.sql; do
sed '1i\
use my_db;
' "$sql" >"$sql.bak" && mv "$sql.bak" "$sql"
done
Run Code Online (Sandbox Code Playgroud)
这将对中的每个.sql文件进行就地编辑backup。编辑命令在每个文件的第一行之前插入一行。
这假设该模式backup/*.sql仅与您要编辑的文件匹配。
使用echo和cat:
for sql in backup/*.sql; do
{ echo 'use my_db;'; cat "$sql"; } >"$sql.tmp" && mv "$sql.tmp" "$sql"
done
Run Code Online (Sandbox Code Playgroud)
在这个循环中,我们首先输出我们想要添加到文件的行,然后是文件的内容。这进入一个临时文件,然后重命名。
命令
echo 'use my_db;' >> backup/*.sql
Run Code Online (Sandbox Code Playgroud)
会扩展到类似的东西
echo 'use my_db;' >> backup/file1.sql backup/file2.sql backup/file3.sql
Run Code Online (Sandbox Code Playgroud)
这与
echo 'use my_db;' backup/file2.sql backup/file3.sql >> backup/file1.sql
Run Code Online (Sandbox Code Playgroud)
这会将给定的字符串附加到backup/file1.sql.
你的第二个命令不会修改任何文件。
Isk*_*tvo 11
sed -i '1 i\use my_db' backup/*.sql
sed -i保留文件中的更改,不要将它们写入stdout.
1- Whensed位于第一行。
i - 插入以下行。
backup/*.sqlsed将执行的文件。