【发布时间】:2020-06-10 07:08:44
【问题描述】:
我有以下文本文件:file.text
Cygwin
value: c
Unix-keep
value: u
Linux
value: l
Unix-16
value: u
Solaris
value: s
Unix-replace-1
value: u
Unix-replace-2
value: u
我想根据前一个字符串替换所有行值:以 Unix- 开头但不包括包含字符串 keep
所以最终受影响的行应该是后面的行: 具有值 value: NEW_VERSION
的 Unix-replace-1 和 Unix-replace-2预期输出:
Cygwin
value: c
Unix-keep
value: u
Linux
value: l
Unix-16
value: NEW_VERSION
Solaris
value: s
Unix-replace-1
value: NEW_VERSION
Unix-replace-2
value: NEW_VERSION
我尝试了以下 sed 脚本:
sed '/^Unix-/ {n;s/.*/value: NEW_VERSION/}' file.text
但这只能开始但不排除 -keep 子字符串。我不知道如何组合排除的。
有什么想法吗?
【问题讨论】:
-
不要使用正则表达式解析 XML 或 HTML
-
忽略xml格式,假设我们有文本文件,我们只需要替换Cygwin,Unix-keep,Solaris等后面的行。 Cygwin版本:c Unix-keep版本:u Unix-replace -1 版本:u 等
-
你在一个专业的 QA 网站上,我们不鼓励人们用错误的工具做完全错误的事情