这是我经常遇到的问题。我有一个文本文件,其中包含单词,每个单词之间有一个空格,行的开头或结尾没有空格。我想使用例如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
答案 0 :(得分:2)
您可以使用此awk
awk '{gsub(/\<A\>/,"");$1=$1}1' file
B C B C
$1=$1
用于清理输出,因此在移除A
之后,单词之间只有一个空格。
如果你确实想要在没有A
的行中保持完整的双/三间距,请使用:
awk 'gsub(/\<A\>/,""){$1=$1}1' file
B C B C
它只会修改其中A
的行
编辑: 更新了单词边界,因此它不会删除部分单词。
答案 1 :(得分:2)
使用 sed :
AMD$ sed -r 's/\bA | A$//g' File
B C B C
在这里,我们正在删除带有空格的A
。我们将介绍两种可能性(a。A
在开头或两者之间,b。A
在结尾处。)