Regex从文本中删除出现的单词,但每个单词之间只留一个空格

Regex从文本中删除出现的单词,但每个单词之间只留一个空格,regex,unix,sed,Regex,Unix,Sed,这是我经常遇到的一个问题。我有一个文本文件,其中包含单词,每个单词之间有一个空格,行首或行尾没有空格。我想使用sed来删除出现的单词,每个单词之间只留一个空格,行首或行尾没有空格。对于一个正则表达式,这可能吗 我能想到的最好的解决方案是,需要三个正则表达式 % cat text A B C A B C A % sed -r 's/ ?\bA\b ?/ /g' text B C B C % sed -r 's/ ?\bA\b ?/ /g' text | sed 's/^ *//' | se

这是我经常遇到的一个问题。我有一个文本文件,其中包含单词,每个单词之间有一个空格,行首或行尾没有空格。我想使用sed来删除出现的单词,每个单词之间只留一个空格,行首或行尾没有空格。对于一个正则表达式,这可能吗

我能想到的最好的解决方案是,需要三个正则表达式

% cat text
A B C A B C A

% sed -r 's/ ?\bA\b ?/ /g' text
 B C B C 

% sed -r 's/ ?\bA\b ?/ /g' text | sed 's/^ *//' | sed 's/ *$//'
B C B C

您可以使用此
awk

awk '{gsub(/\<A\>/,"");$1=$1}1' file
B C B C
它将只修改其中包含
A
的行

编辑:
使用单词边界更新,因此不会删除部分单词。

您可以使用此
awk

awk '{gsub(/\<A\>/,"");$1=$1}1' file
B C B C
它将只修改其中包含
A
的行

编辑:
使用单词边界更新,因此不会删除部分单词。

使用sed

AMD$ sed -r 's/\bA | A$//g' File
B C B C

在这里,我们用空格删除
A
。我们介绍了两种可能性(a.
a
在开头或中间的任何位置,b.
a
在结尾)。使用sed

AMD$ sed -r 's/\bA | A$//g' File
B C B C

在这里,我们用空格删除
A
。我们讨论了这两种可能性(a.
a
在开头或中间的任何位置,b.
a
在结尾)。

这将从单词末尾删除
a
。此
A BA C ARC B C A
应成为
BA C ARC B C
,而不是
BC ARC B C
不,它不会。。。请看A前面的空格(因此只有最后一个单词A)。它会将
BA C
更改为
BC
-Op喜欢删除单词,我想不是单词的一部分。是的。。我正要提到…编辑了答案。。谢天谢地,只有一个问题:如果文件只包含一个应该删除的单词,此正则表达式将不会删除它。这将从单词末尾删除
A
。此
A BA C ARC B C A
应成为
BA C ARC B C
,而不是
BC ARC B C
不,它不会。。。请看A前面的空格(因此只有最后一个单词A)。它会将
BA C
更改为
BC
-Op喜欢删除单词,我想不是单词的一部分。是的。。我正要提到…编辑了答案。。谢谢,只有一个问题:如果文件只包含一个单词,即应该删除的单词,则此正则表达式不会删除它。我喜欢这两个答案,但选择此选项是因为它要求我只键入一次单词。我喜欢这两个答案,但选择此选项是因为它要求我只键入一次单词。