Mar*_*cos 5 sed awk text-processing
我保留了一个程序输出的日志文件。问题是有时会在转储很长的 7 位 ascii 数据(编码二进制)行时发生错误,我不想保留。这些行在到达换行符之前可能是 200KB+。
什么可能是一种简短的、可管道化的方式,例如。与sed仅改变超过长250个字符,线条通过保持该行的仅第一80首最后40个字符,可能具有仅仅更换中央的_?
Gil*_*il' 12
在 sed 中,所有命令都可以以一个条件作为前缀,该条件指示将命令应用于哪些行。一种常见的条件是搜索模式。搜索模式/.\{250\}/匹配超过 250 个字符的行。对于此类行,匹配前 80 个字符和后 40 个字符,并用前缀__和后缀替换整行。
sed -e '/.\{250\}/ s/^\(.\{80\}\).*\(.\{40\}\)$/\1__\2/'
Run Code Online (Sandbox Code Playgroud)
您甚至可以安排替换命令的模式只匹配足够长的行。
sed -e 's/^\(.\{80\}\).\{130,\}\(.\{40\}\)$//'
Run Code Online (Sandbox Code Playgroud)
我不太清楚sed,所以我的解决方案是在 awk 中:
awk 'length>250{len=length;$0=substr($0,1,80) "_" substr($0,len-40+1)};1' file
Run Code Online (Sandbox Code Playgroud)