我正在尝试将require_once 'bootstrap.php';
字符串添加到特定目录中的每个schema.yml
文件中。我是linux新手。有人可以告诉我one-line-magic-command
吗?
非常感谢任何帮助!
修改 我需要递归搜索schema.yml。
答案 0 :(得分:6)
使用sed:
find somedir -name schema.yml | xargs sed -i "1i require_once 'bootstrap.php';"
答案 1 :(得分:4)
find somedir -name schema.yml | \
xargs perl -i.orig -pe 'print "require_once \x27bootstrap.yml\x27\n" if $. == 1; close ARGV if eof'
答案 2 :(得分:2)
您可能需要查看“bootstrap.yml”的拼写...
#!/bin/bash
TMPFILE=/tmp/reallyuniquetempnamewhateveryouchoose
for f in `find . -name schema.yml`
do
echo "require_once 'bootrstap.yml';" > $TMPFILE
cat $f >> $TMPFILE
mv -v $TMPFILE $f
done
编辑:上面的单行内容更好,即使起初有点难以理解:)
答案 3 :(得分:1)
这是@dogbane的答案的后续内容,我喜欢,但需要一些调整才能在我的Mac上正常工作。 (我试图将此作为对他的答案的评论发布,但我认为你不能将所有这些格式都放在评论中。)
我最终得到了:
find somedir -name schema.yml | xargs sed -i '' "1i\\
require_once 'bootstrap.php';
"
具体来说,变化是:
-i
的{{1}}选项(用于就地编辑的备份文件的扩展名)需要一个参数,但空引号就足够了(告诉它不要创建备份文件) )。sed
命令需要在地址后面加sed
(但是转义,因为它是双引号,所以它最终为\
),然后是换行符,然后是要添加的文本,然后是另一个换行符,然后是关闭引号。答案 4 :(得分:0)
创建一个快速python脚本:
prepend_my_text.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
import os
from os.path import join
TEXT = """require_once 'bootstrap.php';\n"""
def main():
for dirpath, _, files in os.walk("."):
for f in files:
if f == "schema.yml":
with file(join(dirpath, f), 'r') as original: data = original.read()
with file(join(dirpath, f), 'w') as modified: modified.write(TEXT + data)
if __name__ == '__main__':
main()
并在您正在搜索的目录中运行它:
$ chmod +x prepend.py
$ ./prepend.py
好处是你可以使用字符串文字(python中的三引号)来避免担心转义字符