需要在linux终端中使用sed编辑多个文件的帮助吗
我想在这里做一个简单的操作。也就是从一个文件样式中剪切几个字符。css在另一个文件client_custom.css上查找替换,以替换100多个不同名称的目录 当我使用以下命令时需要在linux终端中使用sed编辑多个文件的帮助吗,linux,bash,command-line,sed,terminal,Linux,Bash,Command Line,Sed,Terminal,我想在这里做一个简单的操作。也就是从一个文件样式中剪切几个字符。css在另一个文件client_custom.css上查找替换,以替换100多个不同名称的目录 当我使用以下命令时 for d in */; do sed -n 73p ~/assets/*/style.css | cut -c 29-35 | xargs -I :hex: sed -i 's/!BGCOLOR!/:hex:/' ~/assets/*/client_custom.css $d; done 它一直给我以下所有目录
for d in */; do sed -n 73p ~/assets/*/style.css | cut -c 29-35 | xargs -I :hex: sed -i 's/!BGCOLOR!/:hex:/' ~/assets/*/client_custom.css $d; done
它一直给我以下所有目录的错误
sed: couldn't edit dirname/: not a regular file
我不明白为什么它给我的错误消息明确给出了文件的完整路径。它在没有for循环的情况下工作得非常好
有人能帮我解决这个问题吗?sed不支持文件夹作为输入
for d in */;
将文件夹放入$d。如果你写sed$d、 然后BASH将把文件夹名放入sed的参数中,这个糟糕的工具将被混淆
另外~/assets/*/client_custom.css,因为这将扩展到与此模式匹配的所有文件。因此,sed将使用所有文件名调用一次。您可能希望每个文件名调用一次sed
试一试
或者,更好的是:
for f in ~/assets/*/client_custom.css; do
... | sed 's/!BGCOLOR!/:hex:/' "${f}.in" > "${f}"
done
这不会覆盖输出文件。通过这种方式,您可以将*.in保存在文件中,使用模式编辑它们,然后使用sed扩展所有变量
for f in ~/assets/*/client_custom.css; do
... | sed 's/!BGCOLOR!/:hex:/' "${f}.in" > "${f}"
done