sed插入行,其中有到特定行的空格


75

我开头有一行,例如“ Hello world”。我想将此行插入文件中的特定行。例如,将“ hello world”插入下一个文件

hello
world

结果:

hello
    hello world
world

我正在使用以下sed脚本:

sed -i "${line} i ${text}" $file

问题是我在换行时没有空格:

hello
hello world
world

Answers:


97

您可以转义space字符,例如添加2个空格:

sed -i "${line} i \ \ ${text}" $file

或者,您可以在text变量的定义中做到这一点:

text="\ \ hello world"

20
您只能逃脱第一个空间。Sed似乎会自动识别其余的空格。例如,a\ text在文本前面附加4个空格。
haridsv 2015年

谢谢!如此优雅的解决方案!
ShahNewazKhan

31

您只需要\输入一个这样的空白即可

sed -i "${line} i \    ${text}" $file

5
$ a="  some string  "
$ echo -e "hello\nworld"
hello
world
$ echo -e "hello\nworld" | sed "/world/ s/.*/${a}.\n&/" 
hello
  some string  .
world

.是在上述取代加到证明尾随whitepsaces被保留。使用sed "/world/ s/.*/${a}\n&/"代替。


0

可以通过如下拆分表达式来完成:

sed -i $file -e '2i\' -e "     $text"

这是GNU扩展,可简化脚本编写。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.