我想使用bash脚本插入大量代码。
这就是我使用sed(1);
才能工作的方式$ sed "/);/i
'doctrine' => array(n
'driver' => array(n
__NAMESPACE__ . '_driver' => array(n
'class' => 'DoctrineORMMappingDriverAnnotationDriver',n
'cache' => 'array',n
'paths' => array(__DIR__ . '../src/' . __NAMESPACE__ . '/Entity')n
),n
'orm_default' => array(n
'drivers' => array(n
__NAMESPACE__ . 'Entity' => __NAMESPACE__ . '_driver'n
)n
)n
)n
),n
" config/autoload/local.php;
注意:我必须在每行末尾添加 n和才能使其起作用。
有没有办法"不"这样做?插入纯文本?也许是一个不同的命令?
编辑:我的问题是如何插入文本而不必添加所有后斜线和新线。
这是我需要插入的文字:
'doctrine' => array( 'driver' => array( __NAMESPACE__ . '_driver' => array( 'class' => 'DoctrineORMMappingDriverAnnotationDriver', 'cache' => 'array', 'paths' => array(__DIR__ . '/../src/' . __NAMESPACE__ . '/Entity') ), 'orm_default' => array( 'drivers' => array( __NAMESPACE__ . 'Entity' => __NAMESPACE__ . '_driver' ) ) ) )
这是一种方法:
sed '/);/i
'doctrine' => array(
'driver' => array(
__NAMESPACE__ . '_driver' => array(
'class' => 'DoctrineORMMappingDriverAnnotationDriver',
'cache' => 'array',
'paths' => array(__DIR__ . '/../src/' . __NAMESPACE__ . '/Entity')
),
'orm_default' => array(
'drivers' => array(
__NAMESPACE__ . 'Entity' => __NAMESPACE__ . '_driver'
)
)
)
)' file.php
如果您要插入文件,请尝试:
sed '/);/ {
h
r replacement.txt
g
N
}' file.php
cat << 'EOF' >> config/autoload/local.php
'doctrine' => array(
'driver' => array(
__NAMESPACE__ . '_driver' => array(
'class' => 'DoctrineORMMappingDriverAnnotationDriver',
'cache' => 'array',
'paths' => array(__DIR__ . '/../src/' . __NAMESPACE__ . '/Entity')
),
'orm_default' => array(
'drivers' => array(
__NAMESPACE__ . 'Entity' => __NAMESPACE__ . '_driver'
)
)
)
)
EOF
要使用SED线,您可以用read
打印成变量:
read -d '' multiLineString <<"EOF"
'doctrine' => array(
'driver' => array(
__NAMESPACE__ . '_driver' => array(
'class' => 'DoctrineORMMappingDriverAnnotationDriver',
'cache' => 'array',
'paths' => array(__DIR__ . '/../src/' . __NAMESPACE__ . '/Entity')
),
'orm_default' => array(
'drivers' => array(
__NAMESPACE__ . 'Entity' => __NAMESPACE__ . '_driver'
)
)
)
)
EOF
然后将$multiLineString
与sed
一起使用。
如果您坚持使用 sed
,则一种方式(每行末尾不使用后斜线)将其保存到临时文件,例如
cat >tempfile <<'EOF'
code here...
EOF
然后使用sed
中的r
(read)命令
sed '/);/ r tempfile' config/autoload/local.php
这可能对您有用(gnu sed):
cat <<! >insert_file
'doctrine' => array(
'driver' => array(
__NAMESPACE__ . '_driver' => array(
'class' => 'DoctrineORMMappingDriverAnnotationDriver',
'cache' => 'array',
'paths' => array(__DIR__ . '/../src/' . __NAMESPACE__ . '/Entity')
),
'orm_default' => array(
'drivers' => array(
__NAMESPACE__ . 'Entity' => __NAMESPACE__ . '_driver'
)
)
)
)
!
sed '/);/e cat insert_file' file.php