我需要将带有制表符的字符串转换为带空格的字符串。
但我需要多少空格来匹配标签,以便格式相同。
我需要这个,因为Gnuplot标签不喜欢标签。
所以我想:
A very fat cat
哪个是A\tvery\tfat\tcat
,转换为:
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
答案 0 :(得分:2)
您可以使用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$
答案 1 :(得分:0)
这里有一个实用工具: expand
expand [file]
(或来自标准输入)应该可以解决问题。
Re:你的编辑,
使用引用 POSIX样式的命令替换而不是反引号:
FF="$(cat Aggregate/summary.txt | head -n1)"; echo "$FF"
答案 2 :(得分:0)
了解为什么您的TAB空间被转换为单个空间字符
让我们将您的变量重命名为“variable”并将以下内容分配给它
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会自动将其解释为一个大字符串。因此,echo将打印出这一大字符串。