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

上記を使用して、行から ABC XYZ を抽出しようとしています (スペースは保持されます)。私の正規表現は ABCXYZABBDBDAD を返します: 私は正規表現の初心者であり、まだ学ぶことがたくさんあります。

要約すると、空白が先行する数字の前の行から部分文字列 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 に答える