Linux 从文件中删除多个空间并修改原始文件

Linux 从文件中删除多个空间并修改原始文件,linux,shell,ubuntu,terminal,Linux,Shell,Ubuntu,Terminal,指定用于从文本文件中删除多个空格,并在其位置保留单个空格的命令。额外要求:修改原始文件。 成功地拔出了这3个命令: awk '{$2=$2};1' filename.txt tr -s '[:space:]' < filename.txt > filename.new && mv filename.new filename.txt sed -i 's/\s\+/ /g' filename.txt 输出: I'm just giving spaces 编

指定用于从文本文件中删除多个空格,并在其位置保留单个空格的命令。额外要求:修改原始文件。
成功地拔出了这3个命令:

awk '{$2=$2};1' filename.txt

tr -s '[:space:]' < filename.txt > filename.new && mv filename.new filename.txt  

sed -i 's/\s\+/ /g' filename.txt 
输出:

 I'm just giving spaces

编辑:仍在寻找更多答案

如果您想更改原始文件,我会在非标准的
sed-I
(在您的示例中为非便携RE)上使用
ed

printf "%s\n" '1,$s/[[:space:]]\{2,\}/ /g' w | ed -s filename.txt
或者使用
perl

perl -pi -e 's/\s{2,}/ /g' filename.txt
{2,}
正则表达式构造(
\{2,\}
用于POSIX基本正则表达式,如
sed
ed
use)匹配2个或多个先前标记

这两者都匹配任何空格字符,而不仅仅是空格,因为这就是示例的工作方式。如果目标是只压缩多个空格,而不是空格+制表符,则只为单个空格切换
[[:space:]
\s

(顺便说一句,
ed
sed-i
perl-i
,或者一个常规编辑器,任何“就地”修改文件的东西都很有可能在引擎盖下使用一个临时文件。他们只是为您处理它,这样您就不必像您的
tr
示例那样手动操作。)

perl -pi -e 's/\s{2,}/ /g' filename.txt