我有很多名字的文件:我只想替换第一个
sed -i "s/\(name:\).*/\1 ${NEW_VALUE}/" ./myFile
Input
- martin:
name: Martin D'vloper
job: Developer
skills:
- python
- perl
- pascal
- tabitha:
name: Tabitha Bitumen
job: Developer
skills:
- lisp
- fortran
- erlang
Run Code Online (Sandbox Code Playgroud)
输出仅更改名字 Martin D'vloper
- martin:
name: NEW VALUE!!!
job: Developer
skills:
- python
- perl
- pascal
- tabitha:
name: Tabitha Bitumen
job: Developer
skills:
- lisp
- fortran
- erlang
Run Code Online (Sandbox Code Playgroud)
它改变了所有的名字
我看到了一些不同语法的东西
sed '0,/pattern/s/pattern/replacement/' filename
Run Code Online (Sandbox Code Playgroud)
但我无法将 sed 更改为此,因为动态值您能否建议我如何仅用我的语法替换第一个?
这应该做你想要的:
sed -i "0,/name:/{s/name:.*/name: ${NEW_VALUE}/}" ./myFile
Run Code Online (Sandbox Code Playgroud)
它找到第一次出现的位置name:,然后进行替换,即将“ name: followed by any characters”(. * 表示任何字符序列)替换为“ name: ${NEW_VALUE}”,其中NEW_VALUE是示例中的动态变量。
来自 sed 人
0,地址2
从“匹配第一个地址”状态开始,直到找到 addr2。这与 1,addr2 类似,不同之处在于,如果 addr2 与输入的第一行匹配,则 0,addr2 形式将位于其范围的末尾,而 1,addr2 形式仍将位于其范围的开头。仅当 addr2 是正则表达式时才有效。
| 归档时间: |
|
| 查看次数: |
8611 次 |
| 最近记录: |