Regex 使用bash将连字符替换为空格

Regex 使用bash将连字符替换为空格,regex,bash,sed,Regex,Bash,Sed,我正在读取包含以下数据的文件名: 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

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

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
这个怎么样:

tr '-' ' ' < filename > output

您不需要显式计数器或
sed
awk
<代码>bash本身可以处理这个问题。(尤其是使用
awk
,实际上没有任何作用。)

filename=extract\u dates.dat
而IFS=-read-r年-月-日;做
回声“年:$Year”
echo“月:$Month”
回声“天:$Day”
完成<“$filename”

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

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

我的剧本很长。我需要将其分配给一个新变量,以便以后使用该变量。您想在该变量中存储什么?新日期,如
echo$test
中所示,应该打印出来
2017 03 23
您可以将输出通过管道传输到
read
并逐个读取。无论如何,你的
sed
不起作用的原因是你需要逃避偏执。我也会用这个解决方案更新我的答案。
sed 's/\([0-9]\)-\([0-9]\)/\1\2/g' $date
filename=extract_dates.dat

while IFS=- read -r year month day; do
    echo "Year: $year"
    echo "Month: $month"
    echo "Day: $day"
done < "$filename"
test=$(echo $date | tr "-" " ")