我需要在filename.txt
与bar
的每一行之前添加一行foo
。
我需要在Makefile中执行此操作,因此我无法使用sed
,因为它需要标准i\
中的换行符(不是GNU sed,例如Mac OS X中的换行符),这不能在Makefile中完成(至少,不太好)。
我找到的解决方案是:
sed
这将保存该行,用sed '/foo/{h;s/.*/bar/;p;g;}' < in > out
替换其内容,打印新行,恢复旧行(并默认打印)。
是否有更简单的解决方案?
答案 0 :(得分:2)
这会将bar
放在foo
的每一行之前:
sed $'/foo/{s/^/bar\\\n/;}' in >out
这会将bar
放在foo
的每一行之前:
sed '/foo/{s/^/bar\n/;}' in >out
/foo/
这会选择包含foo
。
s/^/bar\n/
^
匹配行的开头。因此,对于选定的行,这将在行的开头用bar\n
替换。这有效地在包含foo
。
在GNU下,可以编写\n
并将sed解释为换行符。这在BSD sed下不起作用。因此版本不同。
答案 1 :(得分:1)
这可能适合你(GNU sed):
sed '/foo/ibar' file
我不确定你为什么说你需要一个换行符,但只是因为插入的行需要长于一行你可以使用bash所以:
sed $'/foo/ibar\\\nbaz' file