我有三个数据文本文件:
年:
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