首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在指定模式后抓取字符串sed排除后的模式

如何在指定模式后抓取字符串sed排除后的模式
EN

Stack Overflow用户
提问于 2017-05-21 04:38:27
回答 3查看 123关注 0票数 0

如何修改文件或stdin后的拆分模式,但下一个拆分模式没有被分隔或排除,假设拆分模式可以无限发生?

简单地说,第一个拆分模式是如何划分的,接下来又是如何划分的?

主要使用sed或如果不能使用,请使用其他工具,如awk和其他。

投入:

代码语言:javascript
复制
WATER[split]FIRE[split]AIR[split]

我试过:

代码语言:javascript
复制
~$ echo WATER[split]FIRE[split]AIR | sed s/.*\\[split]//

我的结果是:

代码语言:javascript
复制
AIR

我想要的输出如下:

代码语言:javascript
复制
FIRE[split]AIR

请怎么做?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-05-21 12:51:28

假设您没有在多行缓冲区上创建和操作:

代码语言:javascript
复制
$ echo 'WATER[split]FIRE[split]AIR' | sed 's/\[split]/\n/; s/.*\n//'
FIRE[split]AIR

如果您是在多行缓冲区上操作,则不能指望输入中没有新行或任何其他字符,因此必须创建一个(下面的#),因此要做到这一点,应该是:

代码语言:javascript
复制
$ echo 'WATER[split]FIRE[split]AIR' |
    sed 's/@/@A/g; s/#/@B/g; s/\[split]/#/; s/.*#//; s/@B/#/g; s/@A/@/g'
FIRE[split]AIR

第一个脚本只在接受\n为换行符的sed中工作,其他sed使用反斜杠,后面跟着文字换行符:

代码语言:javascript
复制
$ echo 'WATER[split]FIRE[split]AIR' | sed 's/\[split]/\
/; s/.*\
//'
FIRE[split]AIR
票数 0
EN

Stack Overflow用户

发布于 2017-05-21 07:18:36

Bash和参数替换

代码语言:javascript
复制
$ foo=WATER[split]FIRE[split]AIR[split]
$ bar=${foo#*\[split\]}                      # head off
$ echo ${bar%\[split\]*}                     # tail off
FIRE[split]AIR
  • ${var%Pattern}$var中删除与$var后端匹配的最短的$Pattern部分
  • ${var#Pattern}$var中删除与$var前端匹配的$Pattern最短部分
票数 0
EN

Stack Overflow用户

发布于 2017-05-21 07:50:46

代码语言:javascript
复制
echo WATER[split]FIRE[split]AIR | sed 's/\[split]/[SPLIT2]/; s/.*\[SPLIT2]//'
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44093254

复制
相关文章

相似问题

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