首页 > 解决方案 > 使用具有不同分隔符的 Sed 替换整行

问题描述

之前在下面的 url 中询问过此问题,但仅使用正斜杠作为分隔符。 https://stackoverflow.com/a/11245501/2520289

什么是正确的语法来做完全相同的事情,但使用任何其他兼容的 sed 分隔符?

为了在大多数 bash 环境中通用兼容性,我更改了分隔符。(git-bash/任何 linux)

例如,我目前正在执行以下代码段来替换特定字符串的任何匹配项,但不是整行。

function misc_findReplace()
{
    VARIABLE_FIND="$1"
    VARIABLE_REPLACE="$2"
    VARIABLE_FILE="$3"

    echo "Finding: $VARIABLE_FIND"
    echo "Replacing With: $VARIABLE_REPLACE"
    echo "File to Operate On: $VARIABLE_FILE"

    sed -i "s@${VARIABLE_FIND}@c${VARIABLE_REPLACE}@g" "$VARIABLE_FILE"
}

FILE_TO_WORK_WITH="/path/to/my/file.properties"

STRING_TO_FIND="destination_hostname=<destination_hostname>"
STRING_TO_REPLACE="destination_hostname=localhost"
misc_findReplace "$STRING_TO_FIND" "$STRING_TO_REPLACE" "$FILE_TO_WORK_WITH"

标签: bashsed

解决方案


要在 sed 中使用不同的分隔符,您需要使用反斜杠转义第一次出现的字符。这样,正确的命令是 sed -i "\@${VARIABLE_FIND}@c${VARIABLE_REPLACE}" "$VARIABLE_FILE"


推荐阅读