$ echo "ABC XYZ 12/123/52/ ABBDBDAD 562.4224.32 02381831522" | sed 's/[^a-zA-Z]//g' raw.tmp
使用上面的内容,我试图从一行(保留空格)中提取ABC XYZ。我的正则表达式返回ABCXYZABBDBDAD:我是正则表达式的菜鸟,还有很多需要学习的东西。
总之,如何从前面有空格的数字前面的一行获取子串ABC XYZ?
答案 0 :(得分: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
答案 1 :(得分: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'
它限制以字母开头并以字母结尾的字符。
答案 2 :(得分: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'