sed中正则表达式的小问题

时间:2012-12-18 14:49:24

标签: regex bash sed

我有这个字符串:

 data="week 50; data; data; data; data"

我想用sed删除它的周部分, 所以我会得到:数据;数据;数据;数据 我想出了这个,但显然不起作用,任何想法为什么? 错误的规则在哪里?

代码:

echo ${data} | sed '/%week.*%;/s/%week.*%;//'

Chers

2 个答案:

答案 0 :(得分:5)

这应该足够了:

echo ${data} | sed 's/week[^;]*;//'

输出:

data; data; data; data

这匹配week加上up-to并包括下一个分号([^;]*;)并将其删除。

如果您还想删除无关的空间,请执行以下操作:

 echo ${data} | sed 's/week[^;]*; *//'

答案 1 :(得分:1)

你真的想要删除包含以“week”开头的文本的以分号分隔的字段,还是只是想要删除第一个字段?考虑:

$ echo "week 50; data; data; data; data" | cut -d\; -f2-
 data; data; data; data

$ echo "week 50; data; data; data; data" | sed 's/[^;]*;//'
 data; data; data; data