3

sedのみを使用して大文字で書かれたすべての単語を削除しようとしています:

sed -r "s/\b[A-Z]\w*\s*//g" < file1 > file2

ただし、このソリューションは、大文字で始まるすべての単語をキャプチャして削除します (これは目標ではありません)。

次に例を示します。

file1 コンテンツ:

AAAAAAAAAAAA
BBbbbbb
AbAbAbAb
aaaaaBBBBB
AAAAAA BBBBBB
A1-B1
a1-b1
A1-b1 AA
AAAAA BBBBB AAAAA
Abbbb AAA
AAAAA AAAABB
Abbbb Baaaa Aaaaa AB
AAAAAA1
BBBBBBb
AAAAAA 1
BBBBBB b

結果は次のようになります (file2 コンテンツ):

BBbbbbb
AbAbAbAb
aaaaaBBBBB
A1-B1
a1-b1
A1-b1 AA
Abbbb AAA
Abbbb Baaaa Aaaaa AB
AAAAAA1
BBBBBBb
AAAAAA 1
BBBBBB b

少なくとも 1 つの数字または 1 つの小文字の各行はそのままにしておく必要があります (削除しないでください)。

4

5 に答える 5

5

egrep の使用:

egrep "[^[:upper:] ]" file
BBbbbbb
AbAbAbAb
aaaaaBBBBB
A1-B1
a1-b1
A1-b1 AA
Abbbb AAA
Abbbb Baaaa Aaaaa AB
AAAAAA1
BBBBBBb
AAAAAA 1
BBBBBB b

または awk を使用:

awk '/[^[:upper:] ]/' file

または sed を使用:

sed -n '/[^[:upper:] ]/p' file
于 2013-11-05T15:50:34.650 に答える
2

試す:

awk '! /^[[:space:][:upper:]]*$/' infile

次の結果が得られます。

BBbbbbb
AbAbAbAb
aaaaaBBBBB
A1-B1
a1-b1
A1-b1 AA
Abbbb AAA
Abbbb Baaaa Aaaaa AB
AAAAAA1
BBBBBBb
AAAAAA 1
BBBBBB b
于 2013-11-05T15:50:00.590 に答える
2
sed -n "/[A-Z]/!p"

少なくとも 1 つの大文字を含む行を印刷しないでください。空行が含まれるかどうかを確認するだけです。この場合、それらは含まれます。

于 2013-11-06T12:52:05.600 に答える
1

そもそもあなたはそう遠くはありませんでした。正規表現から the を削除することから始め\wます。これは、任意の英数字に一致します。次に、空でない行のみを出力します。

sed -rn "s/\b[A-Z]+\s*//g; /[a-z0-9]/p" < file1 > file2 
于 2013-11-05T15:57:18.443 に答える
1

数字または小文字のない行はすべて削除されます。

sed '/[[:digit:][:lower:]]/!d' file1 > file2
于 2013-11-05T16:04:25.817 に答える