Alireza Asked: 2018-05-09 04:06:22 +0800 CST2018-05-09 04:06:22 +0800 CST 2018-05-09 04:06:22 +0800 CST 如何在目录中的所有文件前添加一行? 772 我有一个名为backup文件扩展名的目录*.sql。我想做的事情是在目录中的所有 sql 文件前面加上一行backup。 我做了echo 'use my_db;' >> backup/*.sql,没有用。 我尝试了以下但不知道下一步该怎么做: ls backup/*.sql | xargs echo "use my_db;" 有什么解决方案可以添加该行吗? sed printf 3 个回答 Voted Best Answer Kusalananda 2018-05-09T04:15:02+08:002018-05-09T04:15:02+08:00 使用 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仅匹配您要编辑的文件。 使用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. 您的第二个命令不会修改任何文件。 Iskustvo 2018-05-09T04:20:23+08:002018-05-09T04:20:23+08:00 解决方案 sed -i '1 i\use my_db' backup/*.sql 解释 sed -i保留文件中的更改,不要将它们写入stdout. 1- 何时sed位于第一行。 i- 插入以下行。 backup/*.sqlsed将执行的文件。 Kyrie001 2018-05-09T04:45:40+08:002018-05-09T04:45:40+08:00 您可以遍历该文件夹中的每个文件。 for item in $(ls backup/ | grep "*.sql") do echo "use my_db;" >> $item done
使用 GNU
sed
:带标准
sed
:这将对
.sql
.backup
编辑命令在每个文件的第一行之前插入一行。这假定该模式
backup/*.sql
仅匹配您要编辑的文件。使用
echo
和cat
:在这个循环中,我们首先输出要添加到文件中的行,然后是文件的内容。这进入一个临时文件,然后重命名。
命令
会扩展到类似的东西
这与
这会将给定的字符串附加到
backup/file1.sql
.您的第二个命令不会修改任何文件。
解决方案
sed -i '1 i\use my_db' backup/*.sql
解释
sed -i
保留文件中的更改,不要将它们写入stdout
.1
- 何时sed
位于第一行。i
- 插入以下行。backup/*.sql
sed
将执行的文件。您可以遍历该文件夹中的每个文件。