我正在尝试使用 r (read 命令将 data2 的内容附加到数据。我想在包含“two”的行之后附加内容。我想删除包含“two”的行。
但我撞到了一堵砖墙。感觉就像一个错误,但也许这只是我自己的愚蠢。
好的,这个命令有效。
% sed -r '/two/ r /tmp/data2' < /tmp/data
one
two
five
six
seven
three
four
Run Code Online (Sandbox Code Playgroud)
Sed 似乎对空间有点挑剔......原因不明显,但我会接受它。
% sed -r '/two/ r /tmp/data2 ' < /tmp/data
one
two
three
four
Run Code Online (Sandbox Code Playgroud)
我的目标是在读取命令后运行 (d) 删除以删除原始行。这是我所得到的。
% sed -r '/two/{ r /tmp/data2}' < /tmp/data
sed: -e expression #1, char 0: unmatched `{'
Run Code Online (Sandbox Code Playgroud)
我很确定 '{' 正在匹配,它不是世界上最长的命令。
我真正想跑的...
% sed -r '/two/{ r /tmp/data2; d }' < /tmp/data
Run Code Online (Sandbox Code Playgroud)
系统是 Ubuntu 12. GNU SED。
Pet*_*r.O 11
r /file/path 它后面不能有任何内容。
echo 'one
two
five
six
seven
three
four' >inputfile
echo 'contents of readfile' >readfile
sed '/two/{r readfile
d}' inputfile
Run Code Online (Sandbox Code Playgroud)
注意:您可以使用 shell通过使用“双引号”来参数化sed。它们启用 shell 变量扩展。r从字面上看所有空格......所以不要引用文件名,并且没有任何尾随空格(r和之间的空格/file/path是可以的)。
rfile='/tmp/readfile with multiple spaces in name'
sed "/two/{r $rfile
d}" inputfile
Run Code Online (Sandbox Code Playgroud)
输出
one
contents of readfile
five
six
seven
three
four
Run Code Online (Sandbox Code Playgroud)
附带说明:<输入文件确实没有任何价值。使用 sed 的输入文件参数(它使事情更简单)。
小智 6
用多个“-e”标志来打破它,每一行一个
% sed -e '/two/{ r /tmp/data2' -e 'd}' < /tmp/data
Run Code Online (Sandbox Code Playgroud)