echo 命令后数字之间出现未知空格

echo 命令后数字之间出现未知空格

我有三个数据文本文件:

年:

2014
2014
2014

月:

03
03
03

天:

08
09
10

我使用此功能将它们组合成一个日期:

function pl {                
  sed -n "$1p" $2
}

for (( j=1; j <= 3; j++ ))
do
    yr=$(pl $j year)
    mnth=$(pl $j month)
    dy=$(pl $j day)
    date_format=$yr-$mnth-$dy
    echo $date_format
done

但是,我的输出如下所示:

2014 -03-08
2014 -03-09
2014 -03-10

我需要删除“2014”和“-”之间的空格。其他代码使用 $date_format,因此字符之间不应该有任何空格。

答案1

以下是快速解决$date_format变量中空格的方法:

date_format=${date_format//[[:space:]]/}
echo "$date_format"

答案2

如果您得到该输出,则说明文件中有一个尾随空格year。如果没有,则此操作完全符合预期:

$ printf "2013\n2013\n2013\n" > year; printf "03\n03\n03\n" "03" > month; printf "08\n09\n10\n" > day
$ for (( j=1; j <= 3; j++ )); do
    yr=$(pl $j year)
    mnth=$(pl $j month)
    dy=$(pl $j day)
    date_format=$yr-$mnth-$dy
    echo $date_format
done
2013-03-08
2013-03-09
2013-03-10

并且,如果添加尾随空格:

$ printf "%s2013 \n2013 \n2013 \n" > year
$ for (( j=1; j <= 3; j++ )); do
>     yr=$(pl $j year)
>     mnth=$(pl $j month)
>     dy=$(pl $j day)
>     date_format=$yr-$mnth-$dy
>     echo $date_format
> done
2013 -03-08
2013 -03-09
2013 -03-10

因此,最简单的解决方案是从输入文件中删除空格:

sed -i 's/ *$//' year

但请注意,您正在使用一个非常复杂的解决方案来解决一个非常简单的问题:

$ paste -d"-" year month day | tr -d ' '
2013-03-08
2013-03-09
2013-03-10

答案3

直接在命令中删除年/月/日后面的所有内容sed

pl()函数替换中

sed -n "$1p" $2

sed -n "$1s/\([0-9]*\).*/\1/p" $2

相关内容