1

bashスクリプトを使用して大量のコードを挿入したいと思います。

これが、sed(1)を使用して動作させる方法です。

$ sed "/);/i\
\ \ \ \ 'doctrine' => array(\n\
        'driver' => array(\n\
            __NAMESPACE__ . '_driver' => array(\n\
                'class' => 'Doctrine\ORM\Mapping\Driver\AnnotationDriver',\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' => 'Doctrine\ORM\Mapping\Driver\AnnotationDriver',
            'cache' => 'array',
            'paths' => array(__DIR__ . '/../src/' . __NAMESPACE__ . '/Entity')
        ),
        'orm_default' => array(
            'drivers' => array(
                __NAMESPACE__ . '\Entity' => __NAMESPACE__ . '_driver'
            )
        )
    )
)
4

4 に答える 4

2

これが1つの方法です:

sed '/);/i\
'doctrine' => array(\
    'driver' => array(\
        __NAMESPACE__ . '_driver' => array(\
            'class' => 'Doctrine\ORM\Mapping\Driver\AnnotationDriver',\
            '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
于 2012-10-31T00:44:48.367 に答える
0
cat << 'EOF' >> config/autoload/local.php
'doctrine' => array(
    'driver' => array(
        __NAMESPACE__ . '_driver' => array(
            'class' => 'Doctrine\ORM\Mapping\Driver\AnnotationDriver',
            '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' => 'Doctrine\ORM\Mapping\Driver\AnnotationDriver',
            'cache' => 'array',
            'paths' => array(__DIR__ . '/../src/' . __NAMESPACE__ . '/Entity')
        ),
        'orm_default' => array(
            'drivers' => array(
                __NAMESPACE__ . '\Entity' => __NAMESPACE__ . '_driver'
            )
        )
    )
)
EOF

次に、で使用$multiLineStringsedます。

于 2012-10-31T00:38:41.897 に答える
0

を使用することを主張する場合sed、(各行の終わりに円記号を使用せずに)1つの方法は、一時ファイルに保存することです。

cat >tempfile <<'EOF'
  code here...
EOF

次に、でr(読み取り)コマンドを使用しますsed

sed '/);/ r tempfile' config/autoload/local.php
于 2012-10-31T02:35:26.170 に答える
0

これはあなたのために働くかもしれません(GNU sed):

cat <<\! >insert_file
    'doctrine' => array(
    'driver' => array(
        __NAMESPACE__ . '_driver' => array(
            'class' => 'Doctrine\ORM\Mapping\Driver\AnnotationDriver',
            'cache' => 'array',
            'paths' => array(__DIR__ . '/../src/' . __NAMESPACE__ . '/Entity')
        ),
        'orm_default' => array(
            'drivers' => array(
                __NAMESPACE__ . '\Entity' => __NAMESPACE__ . '_driver'
            )
        )
    )
)

!
sed '/);/e cat insert_file' file.php
于 2012-10-31T10:10:01.397 に答える