gpt4 book ai didi

regex - Shell脚本,替换下划线+空格+可能的数字

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:55:05 29 4
gpt4 key购买 nike

我正在尝试用 ★ 替换文本中的任意位置的 _ _1 或可能的 _3_1。所以它可以是空格或下划线之间的数字,最后它始终是数字。

到目前为止,我只能替换一个数字,每次我尝试添加更多时它都会停止工作。

这是行不通的行:

sed -e 's/ [0-9] /★/g' |

更新后的全部代码:

echo
echo `cal` |

sed "s/$(date +%e) / $(date +%e | sed 's/.*/★/g') /" |

sed s'/Su Mo Tu We Th Fr Sa//g' |

sed s'/ */ \| /g' |

sed 's/_[ 0-9]_[0-9]/★/g'|


sed s'/^ \|//' | sed s'/ \|//' | sed s'/\|/: /' |

sed s'/\|//g' | sed s"/$/ /"

这是原始输出: Original output

这是我的代码之后的输出,下划线仍然存在: enter image description here

原始字符串来自“cal”,由于某种原因,在当天放了一个_ _。如果是 9 月 2 日,则表示 _ _2,如果是 30 日,则表示 _3_0:

"September 2018 Su Mo Tu We Th Fr Sa _ _1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30"

我想要的输出取代当前日期的星星。

"September 2018: ★ 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30"

最佳答案

如果您使用 od 检查 cal 的输出,您可以看到您应该使用今天前面的 _ 删除退格日期:

$ echo $(cal) | od -a
0000000 S e p t e m b e r sp 2 0 1 8 sp S
0000020 u sp M o sp T u sp W e sp T h sp F r
0000040 sp S a sp _ bs sp _ bs 1 sp 2 sp 3 sp 4
0000060 sp 5 sp 6 sp 7 sp 8 sp 9 sp 1 0 sp 1 1
0000100 sp 1 2 sp 1 3 sp 1 4 sp 1 5 sp 1 6 sp
0000120 1 7 sp 1 8 sp 1 9 sp 2 0 sp 2 1 sp 2
0000140 2 sp 2 3 sp 2 4 sp 2 5 sp 2 6 sp 2 7
0000160 sp 2 8 sp 2 9 sp 3 0 nl

今天是 1,您可以在上面的输出中看到序列 _ bs sp _ bs 1

要用 替换今天的日期,使用 awk 替换这 5 个字符和日期编号即可轻松完成:

$ echo $(cal) | awk -v t=$(echo $(date +%e)) 'sub("_[\b] _[\b]"t,"★")' 
September 2018 Su Mo Tu We Th Fr Sa ★ 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30

更简单,您可以使用 cal -h 关闭今天日期的高亮显示,然后执行以下操作:

$ echo $(cal -h) | awk -v t=$(echo $(date +%e)) 'sub(" " t " "," ★ ")'
September 2018 Su Mo Tu We Th Fr Sa ★ 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30

或者在这种情况下使用 sed:

$ echo $(cal -h) | sed -E "s/ $(echo $(date +%e)) / ★  /" 
September 2018 Su Mo Tu We Th Fr Sa ★ 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30

sed 在第一种情况下不像 awk 那样容易使用,因为它缺乏对转义字符的一致支持,例如 \b(其他比 GNU sed)。

关于regex - Shell脚本,替换下划线+空格+可能的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52128240/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com