bash - Sed-替换紧接在特定模式之后的下一个字符串单词,但仅在文件中第一次出现
问题描述
我需要一个sed
命令,它将在模式之后立即替换字符串,但仅在文件中第一次出现
为了替换第一次出现,给出了:
sed -i '' -e '0,/abc/s//def/' filename
这将替换匹配的字符串而不是匹配后的字符串
对于匹配后立即替换字符串,给出了:
sed -i 's/\(text=\)\(.*\)/\1qwerty/' filename
这将在下一个匹配后立即替换字符串,但适用于所有出现。
在一个文件中,我有两次这样的字符串“text=abc”:
abc
text=occurrence1
qwe
uio
text=occurrence2
dsf
我想occurence1
用字符串“qwerty”替换该部分,以便输出如下所示:
text=qwerty.
但我只想为文件中的第一次出现而不是所有地方这样做。
解决方案
应该GNU sed
工作:
例子:
cat file:
abc
text=xyz1
qwe
uio
text=xyz
dsf
现在,只用“text=qwerty”替换第一次出现的字符串“text=”:
sed -r '0,/text=/{s/text=(.*)/text=qwerty/}' file
输出:
abc
text=qwerty
qwe
uio
text=xyz
dsf
选项“-r”在sed
:
-r : --regexp-extended, to use extended regular expressions
推荐阅读
- databricks - Databrick 连接到 ADLS Gen2 文本文件
- python - 如何在 django 的管理面板中为 m2m 字段的 CheckboxSelectMultiple 添加滚动条?
- excel - VBA 按列表过滤表并发送电子邮件
- python - 如何在 docker 容器中使用本地文件?
- testing - 如何使用请求在 JEST 中测试异步调用而不使用模拟和等待反应钩子测试库
- angular - Firebase 经过身份验证的用户,但没有权限
- python - 无法在 PyQt5 中打印点击的行
- excel - 如何拒绝 application.inputbox 中的符号
- c++ - 了解 Getline 函数
- webpack - Livereload 服务器导致 ERR:CONNECTION REFUSED