Regex 基于sed的多个子串提取

Regex 基于sed的多个子串提取,regex,sed,substring,Regex,Sed,Substring,我有一个xml文件,如: <http:website/CODE1> <http:website/CODE2> <http:website/CODE3> 为了用一个空的空格替换与第一个正则表达式不匹配的所有内容。正则表达式是正确的,但如果我使用“否定”符号,它就不起作用了?发生了什么? 此外,如何对同一行应用多个替换?这里有一个提示-因为您似乎想自己解决它:) 我会找类似的东西 AAAsomethingBBBanotherCCC 把它换成 something

我有一个xml文件,如:

<http:website/CODE1> <http:website/CODE2> <http:website/CODE3>
为了用一个空的空格替换与第一个正则表达式不匹配的所有内容。正则表达式是正确的,但如果我使用“否定”符号,它就不起作用了?发生了什么?
此外,如何对同一行应用多个替换?

这里有一个提示-因为您似乎想自己解决它:)

我会找类似的东西

AAAsomethingBBBanotherCCC
把它换成

something--another
\(\)
用于选择零件,
\1
\2
用于检索零件

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,作为分隔符(取决于环境)

如果您的输入文本与您的示例相匹配,则在一行上有3个标记,用空格分隔,目标文本位于每个标记的最后一个
/
和结尾
之间,则将起作用:

sed 's/<[^>]*\/\([^>]*\)>/\1/g' filename
sed的/]*\/\([^>]*\)>/\1/g”文件名

通过将多个替换链接在一起,对一行应用多个替换,即
sed的s/a/b/;s/b/c/g/s/x/y/'文件
。也可以将所有操作放入一个文件中,每行一个,这样更易于阅读,然后像
sed-f mySedScript.sed file那样调用它。祝你好运
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
sed 's/<[^>]*\/\([^>]*\)>/\1/g' filename