使用 bash 脚本删除文本文件中单词之间的空格

使用 bash 脚本删除文本文件中单词之间的空格

我正在使用一个 bash 脚本,它可以解析来自一堆不同文本文件的数据并生成一个 .dts 文件。.dts 文件包含每个列标题之间的空格,我需要删除它们,因为它会使我使用的绘图工具崩溃。例如,见下文:

Avg Interval Time           Interval Num        Total pts         Avg Delta Time

我需要它看起来像这样(每列标题之间有空格)

AvgIntervalTime           IntervalNum        Totalpts         AvgDeltaTime

sed命令能实现这个功能吗?以上内容全部在.dts文件的第1行。

FSA,我对 sed 命令做了一些研究,我只能找到如何删除前缘/后缘空格或所有空格的例子,但没有找到如何删除某些单词之间的空格的例子。

答案1

如果你想匹配单倍空间发生单词字符之间,你可以用以下方式固定它\b

\b

匹配单词边界;也就是说,如果左边的字符是“单词”字符而右边的字符是“非单词”字符,则匹配,反之亦然。

例如

$ cat file
Avg Interval Time           Interval Num        Total pts         Avg Delta Time

$ sed 's/\b \b//g' file
AvgIntervalTime           IntervalNum        Totalpts         AvgDeltaTime

答案2

以下是一些脚本:

  • sed 's/\([^ ]\) \([^ ]\)/\1\2/g'当单词之间用一个空格分隔,列之间用制表符或多个空格分隔时。编辑:请参阅@steeldriver 的回答获得该脚本的更好版本
  • sed '1s/\([^ ]\) \([^ ]\)/\1\2/g'仅限第一行
  • tr -d ' '删除所有空格
  • sed 's/Avg \+Interval \+Time/AvgIntervalTime/;s/Interval \+Num/IntervalNum/;s/Total \+pts/Totalpts/;s/Avg \+Delta \+Time/AvgDeltaTime/'手动指定单词并删除任意数量的空格

将 .dts 文件通过管道传输到 sed 命令,然后重定向到新文件或-i使用sed <expr> <filename>

相关内容