$ 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?
这可以使它:
$ 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
或许这个
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'
这限制了以字母开头和以字母结尾的字符。
您需要编写以下内容
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'