将SED限制为一行的前10个字符

Mik*_*keH 6 bash sed

我正在运行sed作为shell脚本的一部分来清理绑定日志以插入数据库.

其中一个sed命令如下:

sed -i 's/-/:/g' $DPath/named.query.log
Run Code Online (Sandbox Code Playgroud)

这结果是有问题的,因为它破坏了还包括破折号的任何资源请求(我正在使用:作为进一步向下的awk语句的分隔符).

我的问题是如何将上面的sed命令限制为只有行的前十个字符?我没有看到一个特定的开关来做到这一点,而且我还远远不够好用RegEx开始开发一个有效的开关.我不能只使用正则表达式匹配前面的数字,因为模式可能是资源请求的一部分.哎呀,我甚至不能使用#### - ## - ##的模式匹配,因为它再次成为资源的一部分.

任何想法都非常感谢.

Ed *_*ton 3

使用 awk [几乎总是]更简单:

awk '{target=substr($0,1,10); gsub(/-/,":",target); print target substr($0,11)}' file
Run Code Online (Sandbox Code Playgroud)

  • 甚至(未经测试)`perl -pe 'substr($_, 0, 10) =~ s/:/-/g' file` (2认同)