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位之后复制所有数字.
使用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.
| 归档时间: |
|
| 查看次数: |
220 次 |
| 最近记录: |