这个sed表达是什么意思?

时间:2012-08-03 16:29:27

标签: sed

我正在尝试使用我在工作中继承的一些脚本,并想知道是否有人可以破译这个表达式试图完成的内容:

|sed -e 's#\(.\{36\}\)\(.*\)#\1|\2#g' | sed -e 's#\(.\{49\}\)\(.*\)#\1|\2#g'

我试图通过参考手册和谷歌对此进行逆向工程,但尚未成功。

谢谢!

2 个答案:

答案 0 :(得分:2)

这意味着

  • 在每行的前36个字符后插入'|'

  • 在前49个字符后的输出插入'|'

  • 如果该行包含至少36个字符,分别包含49个字符,则完成所有这些插入。

  • 你可以做得更短,所以:

    | sed ' s:^.\{36\}:&|:; s:^.\{49\}:&|: '

答案 1 :(得分:2)

这是两个sed语句。第一个在行的前36个字符后插入管道符号('|'),第二个在前49个字符后插入管道符(包括它在第一步中插入的管道)。

据我所知,这些可以写得更简洁,效果相同:

|sed -e 's#\(.\{36\}\)#\1|#' | sed -e 's#\(.\{49\}\)#\1|#'