sed - なぜ動作しないのですか?

sed - なぜ動作しないのですか?

私はbashスクリプトを使ってphp.iniファイルの設定を変更しようとしました。

私の状況は次のとおりです。

非常に具体的な設定があり、デフォルトは次のとおりです。

;date.timezone =

今私はそれを次に変えようとしていますsed

date.timezone = "America/Mexico_City"

私が使用したいコマンドは次のとおりです。

sed -i '/^;date\.timezone[[:space:]]=.*$/date.timezone = "America/Mexico_City"' php.ini

しかし、私はそれを理解します:

sed: -e expression #1, char 35: extra characters after command

理由はわかりませんが、1つの文字だけを残しておくと機能します(予想通りではありませんが、エラーを返しません)。例:

sed -i '/^;date\.timezone[[:space:]]=.*$/d' php.ini

これは単に行を削除します;date.timezone =

私はsedに初めて触れたので、助けてくれて本当にありがとう。

ありがとう

答え1

あなたは努力していますSsあるパターンを別のパターンに置き換えるには、次の形式のsedコマンドを使用する必要があります。

's/pattern/replacement/'

また、パターンをエスケープする/か、文字列のすべての文字を置き換える必要があります(あなたの場合"America\/Mexico_City")。だから

sed 's/^;date\.timezone[[:space:]]=.*$/date.timezone = "America\/Mexico_City"/'

または、区切り文字を別のパターンに置き換えてスラッシュをエスケープするのを防ぎますs#pattern#replacement#

sed 's#^;date\.timezone[[:space:]]=.*$#date.timezone = "America/Mexico_City"#'

関連情報