0
 $  echo "ABC XYZ 12/123/52/ ABBDBDAD 562.4224.32 02381831522" | sed 's/[^a-zA-Z]//g' raw.tmp

使用上述内容,我试图从一行中提取 ABC XYZ(保留空格)。我的 regex 返回 ABCXYZABBDBDAD:我是 regex 的菜鸟,还有很多东西要学。

总之,我如何从前面有空格的数字之前的一行中获取子字符串 ABC XYZ?

4

3 回答 3

2

这可以使它:

$ echo "ABC XYZ 12/123/52/ ABBDBDAD 562.4224.32 02381831522" | sed -n 's/\([A-Z]* [A-Z]*\) [0-9]*.*/\1/p' 
ABC XYZ

解释:

sed -n 's/\([A-Z]* [A-Z]*\) [0-9]*.*/\1/p' 

  \([A-Z]* [A-Z]*\)  == catch WORD + space + WORD
       [0-9]*.*      == some number + space + rest of string
  /\1/p              == print catched string
于 2013-08-08T08:52:22.993 回答
1

或许这个

echo "ABC XYZ 12/123/52/ ABBDBDAD 562.4224.32 02381831522" | sed -n 's/^\([a-zA-Z ]\+\).*/\1/gp' > raw.tmp

或者更准确地说

echo "ABC XYZ 12/123/52/ ABBDBDAD 562.4224.32 02381831522" | sed -n 's/^\([a-zA-Z][a-zA-Z ]\+[a-zA-Z]\).*/\1/gp'

这限制了以字母开头和以字母结尾的字符。

于 2013-08-08T08:51:38.897 回答
0

您需要编写以下内容

echo "ABC XYZ 12/123/52/ ABBDBDAD 562.4224.32 02381831522" | sed 's/.*\(ABC XYZ\).*/\1/g'

输出

ABC XYZ

重点是-我相信您正在尝试提取“ABC XYZ”(完全正确)。所以你提取它并用它替换整行

编辑我想我错过了重点。你基本上想要'Str1 Str2'

在这种情况下,以下作品

echo "ABC XYZ 12/123/52/ ABBDBDAD 562.4224.32 02381831522" | sed 's/\([a-zA-Z ][a-zA-Z ]*\).*/\1/g'
于 2013-08-08T08:53:14.040 回答