我有一个名为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/*.sql
sed
将执行的文件。
归档时间: |
|
查看次数: |
9041 次 |
最近记录: |