【问题标题】:unix SED command to replace part of key value pair用于替换部分键值对的 unix SED 命令
【发布时间】:2019-06-27 01:38:28
【问题描述】:

我们有要求,我需要在我们的配置文件中替换部分参数值。

例子

key1=123-456

我需要用新值替换连字符后的值。

我得到了在其他项目中使用的命令,但我不确定它是如何工作的。

命令

[test]$ cat test_sed_key_value.txt
key1=123-456
[test]$ sed -i -e '/key1/ s/-.*$/-789/' test_sed_key_value.txt
[test]$
[test]$ cat test_sed_key_value.txt
key1=123-789
[test]$

如果有人能解释上述命令是如何使用的,或者有没有更简单的方法可以使用 sed 来做到这一点,那将会很有帮助。

【问题讨论】:

  • 格式是否符合您的要求? IE。您要替换的值实际上是否包含星号?您的示例和代码在此似乎不一致......
  • 命令的哪一部分你不明白?请解释你理解的部分。
  • 我经常使用sed命令替换值,格式-sed -i -e '/valueToSearchFor/NewValue/ReplaceGlobalOrSpecificValue' 但是描述中的命令有多个分隔符'/'
  • 我要替换的值不会有任何星号,这是我从别人那里得到的命令,但我不明白它是如何工作的
  • 你知道你可以edit你的问题来添加信息或解决问题吗?

标签: unix sed


【解决方案1】:

这里是该命令行部分的列表,每个部分后面都有一个简短的解释:

sed 

使用哪个工具

-i

标志:将效果直接应用到处理过的文件(不创建输入文件的副本)

-e

表达式参数:应用的 sed 代码如下

/key1/

“地址”:仅处理应用此正则表达式的行,即包含文本“key1”的行

s/replacethis/withthis/

命令:进行搜索和替换,“replacethis”和“withthis”在解释旁边

-.*$

regex:(实际上是在命令行中,而不是“replacethis”)一个表示“减号”的正则表达式,后跟任何数字,直到行尾

-789

字面量:(实际上是在命令行中,而不是“withthis”)只是字符串“-789”

test_sed_key_value.txt

文件参数:处理这个文件

我想不出任何更简单的方法。显示的命令已经对输入文件的格式进行了一些假设。

【讨论】:

    【解决方案2】:

    我想补充一下 Yunnosch 的回答,这里的“replacethis”是一个正则表达式:

    -.*$
    

    请参阅here,了解 Gnu 中 sed 正则表达式的语法概述。 星号表示重复前面的内容,点表示任何字符,所以.* 表示字符序列。 $ 是行尾。

    你可能想要更严格一些,因为在这里你会在这样的一行中丢失一些东西:

    key1=123-456, key2=abc-def
    

    替换为:

    key1=123-789
    

    完全删除key2 部分(因为.* 占用第一个破折号之后的所有字符,直到行尾)。

    因此,根据您的值的格式,您可能更喜欢类似

    -[0-9]*
    

    (不带$),表示-之后的数字序列

    -[0-9a-zA-Z_]
    

    表示-之后的一系列数字或字母或下划线

    【讨论】:

    • 是的。您很好地阐述了我总结为“做出假设”的内容。
    猜你喜欢
    • 2014-03-28
    • 1970-01-01
    • 2020-10-09
    • 2012-12-29
    • 2013-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-10
    相关资源
    最近更新 更多