如何用linux中的空格替换前导零?

时间:2017-02-04 15:18:45

标签: linux awk sed

我有这样的文字

Jan 28\|Jan 29\|Jan 30\|Jan 31\|Feb 01\|Feb 02\|Feb 03\|Feb 04

我想要像这样的结果

Jan 28\|Jan 29\|Jan 30\|Jan 31\|Feb  1\|Feb  2\|Feb  3\|Feb  4

我一直在搜索并且没有结果,请帮助

4 个答案:

答案 0 :(得分:5)

使用gawk,您可以使用gensub

awk '{print gensub(/ 0([0-9])/,"  \\1", "g")}' file
Jan 28\|Jan 29\|Jan 30\|Jan 31\|Feb  1\|Feb  2\|Feb  3\|Feb  4

sed相同的模式:

sed  's/ 0\([0-9]\)/  \1/g' file
Jan 28\|Jan 29\|Jan 30\|Jan 31\|Feb  1\|Feb  2\|Feb  3\|Feb  4

答案 1 :(得分:2)

一个简单的模式,只需用SELECT (c.subs = s.subs) as same_flag FROM (SELECT GROUP_CONCAT(ID_Sub ORDER BY ID_sub) as subs FROM Course WHERE ID_Course='$courseid' ) c CROSS JOIN (SELECT GROUP_CONCAT(ID_Sub ORDER BY ID_sub) as subs FROM student WHERE ID_Student='$id' ) s; 替换空格,然后用两个空格(因为2个数字的天数不会有前导0):

0

添加sed 's/ 0/ /g' file 标志以编辑文件:

-i

如果您想要更具限制性,使用反向引用可以搜索和替换月份,后跟一个空格,sed -i 's/ 0/ /g' file 包含月份和空格,而不是0

0

答案 2 :(得分:1)

echo "Jan 28\|Jan 29\|Jan 30\|Jan 31\|Feb 01\|Feb 02\|Feb 03\|Feb 04"|\
> awk '{gsub(/ 0/,"  ")}1'

Jan 28\|Jan 29\|Jan 30\|Jan 31\|Feb  1\|Feb  2\|Feb  3\|Feb  4

答案 3 :(得分:0)

这可能适合你(GNU sed):

sed 's/\b[0-9]\b/0&/g' file

使用零前缀单个数字。