我正在使用一个 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>