我需要将带制表符的字符串转换为带空格的字符串。
但是我需要空格数以匹配制表符,以便格式相同。
我需要这个,因为 Gnuplot 标签不喜欢标签。
所以我想要:
A very fat cat
这是Atverytfattcat
,转换为:
A very fat cat
带空格,而不是
A very fat cat
编辑 1
我想我误解了这个问题:
$ cat -T Aggregate/summary.txt | head -n1
Date Pnl AnnPnl Days AvTrds AveVol AveDur TDays Pnl/$ AvPnl StdDev MAXD Shrpe
但是当我分配给一个变量时,空格会丢失:
$ FF=`cat Aggregate/summary.txt | head -n1`; echo $FF
Date Pnl AnnPnl Days AvTrds AveVol AveDur TDays Pnl/$ AvPnl StdDev MAXD Shrpe
expand
命令:
~$ cat >c
a fast cat nrstaui e
~$ expand c>d
使用 cat -A
时,您可以看到使用了空格(制表符由 ^I
表示):
~$ cat -A c
a^Ifast^Icat^Inrstaui^Ie$
~$ cat -A d
a fast cat nrstaui e$
编辑:如果将行分配给变量,则必须使用双引号来查看差异:
~$ F=$(cat c)
~$ echo "$F" |cat -A
a^Ifast^Icat^Inrstaui^Ie$
~$ echo $F |cat -A
a fast cat nrstaui e$
空格也有同样的问题:
~$ F=$(cat d)
~$ echo "$F" |cat -A
a fast cat nrstaui e$
~$ echo $F |cat -A
a fast cat nrstaui e$
有一个实用程序专门用于此:
expand
.
expand [file]
(或来自标准输入)应该可以解决问题。
回复:您的编辑,
使用带引号的 POSIX 样式命令替换而不是反引号:
FF="$(cat Aggregate/summary.txt | head -n1)"; echo "$FF"
了解为什么将制表符空格转换为单个空格字符
让我们将您的变量重命名为"变量"并为其分配以下内容
variable =" Date Pnl AnnPnl Days AvTrds AveVol AveDur TDays Pnl/$ AvPnl StdDev MAXD Shrpe"
[1] 当你这样做时
echo $variable
您的输出将是
Date Pnl AnnPnl Days AvTrds AveVol AveDur TDays Pnl/$ AvPnl StdDev MAXD Shrpe
原因:echo 不是将您的变量视为一个大字符串,而是将几个字符串视为由空格或多个空格字符组成的字符串。这是因为 bash 没有将此变量视为一个字符串,因为该变量未包含在双 qoutes 中。
[2] 当你这样做时
echo "$variable"
您的输出将是
Date Pnl AnnPnl Days AvTrds AveVol AveDur TDays Pnl/$ AvPnl StdDev MAXD Shrpe
原因:这是因为您用双引号将变量括起来,bash将自动解释为一个大字符串。结果,回显将打印这个大字符串。