首页 > 解决方案 > 使用 bash 将连字符替换为空格

问题描述

我正在读取包含以下数据的文件名:

2017-03-23
2018-01-23
2017-07-31

我想阅读每一行并用空格替换连字符。鉴于上面的例子,我应该得到以下信息:

2017 03 23
2018 01 23
2017 07 31

这是我的代码:

#!/bin/sh

filename=extract_dates.dat
line=1
totline=`wc -l < $filename`

while [ $line -le $totline ]
do
    date=`sed -n -e ''"$line"'p' $filename | awk '{print $line}'`
    echo $date
    test=`sed 's/([0-9])-([0-9])/\1\2/g' $date`
    echo $test
    line=`expr $line + 1`
done

我收到以下错误:

sed: 1: "s/([0-9])-([0-9])/\1\2/g": \1 not defined in the RE

标签: regexbashsed

解决方案


tr 将用空格替换连字符,例如:

test=$(echo $date | tr "-" " ")

推荐阅读