sed打印前255个字符,然后是整行

时间:2014-06-30 14:21:11

标签: regex shell sed ksh mks

我想要打印前255个字符,然后用' ^'分隔整行。字符。

(现在我一次只测试10个字符,而不是255个。) 例如,这可以解决一个大问题:

cat myfile.txt | sed -e 's:^\(.\{10\}\)\(.*\)$:\1^\1\2:'

问题是有些线条非常短,在这种情况下,我想打印整行两次,用' ^'字符。

例如:

1234567890987654321
123

应打印为:

1234567890^1234567890987654321
123^123

我真的不需要使用sed,但似乎sed应该能够做到这一点 - 但任何一行命令都会很好。

2 个答案:

答案 0 :(得分:2)

它只需要对你的sed脚本进行几乎微不足道的调整 - 你想要打印一行的前N个字符,然后是插入符号和整行,所以你指定一个带数字的范围和上限之前的逗号:

sed -e 's:^\(.\{1,10\}\)\(.*\)$:\1^\1\2:'

或(减少反斜杠和记住字符串的数量):

sed -e 's:^.\{0,10\}:&^&:'

这会将插入符号添加到空行;带1,10的版本将空行留空。

顺便提一下,Mac OS X sed在逗号之前需要一个数字; GNU sed遵循传统并且不需要它,并将前导缺失的数字视为0.因此,可移植代码不会写:

sed -e 's:^.\{,10\}:&^&:'

它适用于sed的某些,可能是大多数但不是所有版本。

答案 1 :(得分:1)

您可以轻松地使用awk

awk '{print substr($0, 1, 10) "^" $0}' file
1234567890^1234567890987654321
123^123