如何在目录中的所有文件前面添加一行?

如何在目录中的所有文件前面添加一行?

我有一个名为backup文件扩展名的目录*.sql。我想要做的事情是在目录中的所有 sql 文件前面添加一行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。编辑命令在每个文件的第一行之前插入一行。

这假设该模式backup/*.sql仅与您要编辑的文件匹配。


使用echocat

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

解决方案

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

相关内容