首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >排除sed中替换的特定行

排除sed中替换的特定行
EN

Unix & Linux用户
提问于 2019-12-11 08:59:30
回答 2查看 2K关注 0票数 2

除特定行外,我想删除一些标点符号。比如,我想sed只删除这些, : { } [ ]标记,但不是在第1、4-7、38、39行。我怎么能做到这一点?

EN

回答 2

Unix & Linux用户

发布于 2019-12-11 09:47:40

您可以一个接一个地添加要从替换中排除的块:

代码语言:javascript
复制
sed -e '1!{ 4,7!{ 38,39! s/[][,:{}]//g ;}' -e '}' file_in > file_out

示例(具有不同的范围以保持较短的范围):

代码语言:javascript
复制
$ printf 'line %s , : { } [ ]\n' {1..10} | sed -e '1!{ 4,6!{ 8,9! s/[][,:{}]//g ;}' -e '}'
line 1 , : { } [ ]
line 2
line 3
line 4 , : { } [ ]
line 5 , : { } [ ]
line 6 , : { } [ ]
line 7
line 8 , : { } [ ]
line 9 , : { } [ ]
line 10
票数 3
EN

Unix & Linux用户

发布于 2019-12-11 10:11:17

一种方法是首先在希望保留的行上使用b命令:

代码语言:javascript
复制
sed -e 1b -e 4,7b -e 38,39b -e 's/[][,:{}]//g'

或者:

代码语言:javascript
复制
sed '
  1     b
  4,7   b
  38,39 b
  s/[][,:{}]//g'

使用sed的GNU实现,您还可以编写它:

代码语言:javascript
复制
sed '1b;4,7b;38,39b;s/[][,:{}]//g'
票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/556680

复制
相关文章

相似问题

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