gpt4 book ai didi

bash - sed 打印一行,其中至少有 3 位数字在第 4 位数字后重复数字

转载 作者:行者123 更新时间:2023-11-29 09:37:32 26 4
gpt4 key购买 nike

我正在尝试在 sed 中编写一个脚本,该脚本获取一个文件名作为参数。

我的目标是打印文件中至少包含 3 个的所有行数字。在第 4 个数字之后,所有数字都应重复。我需要使用 sed 的解决方案。

示例输入文件:

abc 1 def2 3 ab45 z11
123 zy
ab1cd2ef3gh4z56
abc12aa

期望的输出:

abc 1 def2 3 ab455 z1111
123 zy
ab1cd2ef3gh4z5566

我尝试过的:

sed '/[0-9].*[0-9].*[0-9]/d' ./F1 

我不知道如何只在第 4 位数字后复制所有数字。

最佳答案

使用 GNU sed,您可以执行以下操作:

$ sed -E '/([[:digit:]].*){3}/!d;s/[[:digit:]]/&&/5g' infile
abc 1 def2 3 ab455 z1111
123 zy
ab1cd2ef3gh4z5566

第一个命令 /([[:digit:]].*){3}/!d 删除所有不包含至少三位数字的行。

第二个命令,s/[[:digit:]]/&&/5g,重复数字; 5g 标志翻译为“从第五个开始的每一次出现”。 POSIX 未指定将数字标志与 g 混合时的行为; GNU sed 以期望的方式运行。

-E 标志只是为了方便;没有它,我们必须转义 (){}:

sed '/\([[:digit:]].*\)\{3\}/!d;s/[[:digit:]]/&&/5g' infile

如果您的 sed 不理解 -E,您可以改用 -r-E 已被 GNU sed 接受多年(但未记录),BSD seds 也使用 -E。 POSIX 将包含用于 sed 的 -E,如记录 here ;不过,一些较旧的系统只能理解 -r

关于bash - sed 打印一行,其中至少有 3 位数字在第 4 位数字后重复数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48043244/

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