在文本文件中用连字符替换空格

在文本文件中用连字符替换空格

我有一个如下的文本文件:

2018 11 20
2018 11 21
2018 11 22
2018 11 23
2018 11 24
2018 11 25
2018 11 26
2018 11 27

该文件由年、月、日三列组成。我需要-在年、月、日之间添加连字符,如下所示:

2018-11-20
2018-11-21
2018-11-22
2018-11-23
2018-11-24
2018-11-25
2018-11-26
2018-11-27

答案1

sed

假设最后一列后没有空格,我们可以这样做

sed 's/[[:blank:]]/-/g' input.txt

如果可能存在其他字符,而我们特别想捕获“数字序列,然后是空格序列”的模式,我们还可以使用括号中的组模式和扩展正则表达式-r

sed -r 's/([[:digit:]]?+) ?+([[:digit:]]?+) ?+([[:digit:]]?+)/\1-\2-\3/' input.txt

如果我们想要仅限 shell 的解决方案:

while read -r year month day trash; do
    printf "%s-%s-%s\n" "$year" "$month" "$day"
done < input.txt

相关内容