使用sed进行多子串提取

时间:2013-10-28 19:18:39

标签: regex sed substring

我有一个xml文件,如:

<http:website/CODE1> <http:website/CODE2> <http:website/CODE3>

其中:

CODE1是由2个字母2个数字和2个字母定义的代码:AA11BB

CODE2是一个词:东方或西方

CODE3是浮点数

我需要提取此代码,过滤掉xml代码。我需要使用sed。 我认为(仅提取第一个CODE):

sed 's/[A-Z]\{2\}[0-9]\{2\}[A-Z]\{2\}!//g

为了用空的空格替换与第一个RegEx不匹配的所有内容。 RegEx是对的,但如果我使用&#34;否定&#34;符号比它不起作用?怎么了? 此外,如何将多个替换应用于同一行?

3 个答案:

答案 0 :(得分:0)

这是一个提示 - 因为你似乎想自己解决它:)

sed 's/AAA\(.*\)BBB\(.*\)CCC/\1--\2 /'

会寻找像

这样的东西
AAAsomethingBBBanotherCCC

并将其更改为

something--another

\(\)用于选择部件,\1\2用于检索部件

答案 1 :(得分:0)

sed -n "
  /east/ s/.*\([A-Z][A-Z][0-9][0-9][A-Z][A-Z]\)>.*\(east\).*\/\([0-9.,]\{1,\}\)>.*/\1 \2 \3/p
  /west/ s/.*\([A-Z][A-Z][0-9][0-9][A-Z][A-Z]\)>.*\(west\).*\/\([0-9.,]\{1,\}\)>.*/\1 \2 \3/p
  " YourFile

假设每行只有1个三元组(如果没有,结果可能是行上的值和输出的1个三元组的混合)

还包括使用的浮点数。 ou,作为分隔符(取决于环境)

答案 2 :(得分:0)

如果您的输入文字与您的示例匹配,则一行上的3个标记(以空格分隔)与最终/和每个结尾>之间的目标文字一起使用:

sed 's/<[^>]*\/\([^>]*\)>/\1/g' filename