0

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

(现在我一次用 10 个字符而不是 255 个字符进行测试。)例如,这适用于一个大问题:

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

问题是有些行很短,在这种情况下,我想将整行打印两次,并用 '^' 字符分隔。

例如:

1234567890987654321
123

应打印为:

1234567890^1234567890987654321
123^123

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

4

2 回答 2

2

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

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

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

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

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

顺便说一句,Mac OS Xsed要求逗号前有一个数字;GNUsed遵循传统并且不需要它,并将前导缺失的数字视为 0。因此,可移植代码不会写:

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

它适用于一些,也许是大多数,但不是所有版本的sed.

于 2014-06-30T14:53:30.900 回答
1

您可以awk轻松使用:

awk '{print substr($0, 1, 10) "^" $0}' file
1234567890^1234567890987654321
123^123
于 2014-06-30T14:26:22.893 回答