sed打印第4位后至少3位数字复制数字的行

Mic*_*los 2 unix bash shell sed

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

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

示例输入文件:

abc 1 def2 3 ab45 z11
123 zy
ab1cd2ef3gh4z56
abc12aa
Run Code Online (Sandbox Code Playgroud)

期望的输出:

abc 1 def2 3 ab455 z1111
123 zy
ab1cd2ef3gh4z5566
Run Code Online (Sandbox Code Playgroud)

我尝试过的:

sed '/[0-9].*[0-9].*[0-9]/d' ./F1 
Run Code Online (Sandbox Code Playgroud)

我不知道如何才能在第4位之后复制所有数字.

Ben*_* W. 6

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

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

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

第二个命令s/[[:digit:]]/&&/5g,重复数字; 该5g标志转换为"从第五个开始的每一次出现".gPOSIX没有指定混合数字标志时的行为; GNU sed以所需的方式运行.

-E标志仅仅是为了方便; 没有它,我们必须逃跑(){}:

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

如果你的sed不明白-E,你可以-r改用.-E已被GNU sed接受多年(但未被记录),并且BSD seds也被使用-E.POSIX将包括-Esed,如此处所述 ; 但是,一些较旧的系统只能理解-r.