插入时的Sed过程替换-无反斜杠

插入时的Sed过程替换-无反斜杠,sed,Sed,我有一个函数,用于打印需要跨多个文件应用的标题,但如果我使用sed进程替换,则最后一行之前的行上会有一个反斜杠 例如 注意第一行末尾的反斜杠,我不想让它出现。有什么想法吗 我会使用cat来实现: cat <(print_header) file > file_with_header 这是我的难题,如果你能找到更优雅的东西,我很乐意相信你: sed 1 i$print|u头| sed的/$/\\\/g$s/$/\x01/'test.txt | tr-d'\001' 这将在插入的文本后

我有一个函数,用于打印需要跨多个文件应用的标题,但如果我使用sed进程替换,则最后一行之前的行上会有一个反斜杠

例如


注意第一行末尾的反斜杠,我不想让它出现。有什么想法吗

我会使用cat来实现:

cat <(print_header) file > file_with_header

这是我的难题,如果你能找到更优雅的东西,我很乐意相信你:

sed 1 i$print|u头| sed的/$/\\\/g$s/$/\x01/'test.txt | tr-d'\001'


这将在插入的文本后放置一个不可打印的SOH\x01 ascii头字符开头,这排除了反斜杠,然后我在tr上运行它以删除SOH字符

此行为取决于sed方言。不幸的是,这取决于你的版本

要简化调试,请尝试指定逐字文本。这里有一个来自Debian系统

vnix$ sed '1i\
> foo\
> bar' <<':'
> hello
> goodbye
> :
foo
bar
hello
goodbye
您的诊断似乎表明您的sed方言实际上不需要在第一个i之后使用反斜杠


由于您无论如何都是以编程方式生成标题的内容,因此我建议的解决方案是重构代码,这样您就可以避免这个难题。如果你不想要cat$是行尾标记。s/$/\\/将其替换为\。你期待什么?问题出在哪里?@hek2mgl之所以使用它们,是因为sed insert命令似乎需要反斜杠到单独的行上。Sed吃最后一个反斜杠,但在文本中留下任何后续的反斜杠。啊,明白了。无论如何,我建议用猫来做这个。添加了一个答案。@hek2mgl无论如何谢谢,我这次的效果稍微好了一点,最后一行有一个空格,但后续行上没有反斜杠:sed 1 I$print\u header | sed's/$/\\\/g;'谢谢,我知道还有其他方法可以完成。但是我特别想知道如何使用sed实现这一点,在文本中插入文本块是非常有用的,不仅仅是在开始的时候。感谢echo-en$print_header的想法,sed 1r/dev/stdin test.txt似乎完成了这项工作。虽然它并不比我最后得到的东西少多少麻烦。回声似乎完全是多余的;试着只打印页眉| sedYea,它可以在没有echo的情况下工作,但由于它是一个替代品,因此我们无法实际使用sed处理第一行。我希望如此。在有人给sed一个新的零行地址功能之前,我似乎一直在使用我的笨拙的插入。我已经在我的博客上加入了你的想法,因为它在第0行之外的地址有点干净:另一种使用sed:sed猫到前面的方式:
cat <(print_header) file > file_with_header
vnix$ sed '1i\
> foo\
> bar' <<':'
> hello
> goodbye
> :
foo
bar
hello
goodbye