首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >文本处理命令:如果'x‘而不是'y’,那么在行尾添加'z‘

文本处理命令:如果'x‘而不是'y’,那么在行尾添加'z‘
EN

Stack Overflow用户
提问于 2016-04-02 06:55:58
回答 4查看 57关注 0票数 1

假设我有以下输入:

代码语言:javascript
运行
复制
CH12
CH23au
RCH34
CH99de
ZE33a
CH88aude
CHa

我希望输出是这样的:

代码语言:javascript
运行
复制
CH12au
CH23au
RCH34
CH99deau
ZE33a
CH88aude
CHaau

根据这样的规则,行必须以'CH‘开头,而不具有'au’的模式。

我怎样才能做到这一点?

我想我得用sed了?或者是沃克?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-04-02 07:38:17

这可能对您有用(GNU sed):

代码语言:javascript
运行
复制
sed '/^CH/{/au/!s/$/au/}' file

关注从CH开始的行,如果它们不包含au,就追加它。

票数 2
EN

Stack Overflow用户

发布于 2016-04-02 07:50:22

这里是一个简单的Awk脚本,它在行的开头查找CH而没有au。最后一个1是“打印所有输入行”的常用成语,$0是当前的输入行。

代码语言:javascript
运行
复制
awk '/^CH/ && ! /au/ { $0 = $0 "au" }1' file

如果要在外部变量中使用后缀,则需要进行次要的重构。

代码语言:javascript
运行
复制
awk -v suf="au" '/^CH/ && $0 !~ suf { $0 = $0 suf } 1' file
票数 3
EN

Stack Overflow用户

发布于 2016-04-02 07:09:27

使用sed:

代码语言:javascript
运行
复制
sed '/au/!s/^CH\(.*\)/CH\1au/' file
  • /au/!:在不包含au的行中
  • s:替代
  • ^CH行从CH开始
  • \(.*\)后面跟着任何字符(用\( \)捕获)
  • CH\1auCH替换匹配模式,后面跟着捕获的字符,然后结束au
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36370209

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档