gpt4 book ai didi

bash - 在查找两个模式之间的字符串时如何在 sed 中使用环境变量?

转载 作者:行者123 更新时间:2023-12-02 04:30:09 25 4
gpt4 key购买 nike

我正在尝试找到一种方法来查找两个模式之间的所有字符串。这很简单:

    cat file | sed -n "/pattern_start/,/pattern_end/p"

但是,在这种情况下,我想在 sed 脚本中使用变量,这也很好:

    cat file | sed -n "/$var1/,/pattern_end/p"

但是,如果变量包含特殊转义字符,例如“/”,则这不起作用。然后我读到可以将转义字符替换为任何字符,例如 # 或 |

例如,可以说:

    var1=/some/funny/path
cat file | sed -n "#$var1#,#pattern_end#p"

但这对我不起作用。我究竟做错了什么?我尝试在 Google 等上找到答案,但没有成功,而且我在 Stackoverflow 上也找不到任何其他可以解决这个问题的问题。

最佳答案

你可以这样做:

sed -n "/$(sed 's#/#\\/#g' <<< "$var1")/,/end/p" file

您必须保护变量的内容不受您选择的任何分隔符的影响。


为了解决 hek2mgl 的问题,我们可以转义所有潜在的麻烦字符:

re_escape() {
sed 's#[^[:alnum:]_]#\\&#g' <<< "$*"
}
sed -n "/$(re_escape "$var1")/,/end/p" file

关于bash - 在查找两个模式之间的字符串时如何在 sed 中使用环境变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23782174/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com