xpt*_*xpt 7 linux unix sed command-line ubuntu
以下插入文件方法sed曾经有效,甚至在最后一行之前,但不再有效。这是当前的错误sed吗?
sed插入文件方法演示:
mkdir /tmp/test
printf '%s\n' {1..3} > /tmp/test/f1
printf '%s\n' {one,two,three,four,five,six,seven,eight,nine,ten} > /tmp/test/f2
$ cat /tmp/test/f2 | sed -e "/nine/r /tmp/test/f1" -e //N
one
two
three
four
five
six
seven
eight
1
2
3
nine
ten
$ head -9 /tmp/test/f2 | sed -e "/nine/r /tmp/test/f1" -e //N
one
two
three
four
five
six
seven
eight
nine
1
2
3
$ cat /tmp/test/f2 | sed -e "/ten/r /tmp/test/f1" -e //N
one
two
three
four
five
six
seven
eight
nine
ten
1
2
3
$ sed --version
GNU sed version 4.2.1
...
Run Code Online (Sandbox Code Playgroud)
即,行方法之前的插入文件在除最后一行之外的任何地方都有效。它以前可以工作。这是当前的错误sed吗?
谢谢
根据你的评论“必须匹配对最后一行”,所以我会考虑使用$(最后一行)和i(INSERT命令)的sed。例如:
sed '$ i\INSERT BEFORE LAST LINE' number.txt
1
2
3
4
INSERT BEFORE LAST LINE
5
Run Code Online (Sandbox Code Playgroud)
只需确保文件的最后一行没有空行,它应该可以工作。请注意美元符号和 之间的空格以及.后面的i反斜杠 ( \) i。这会将反斜杠后的文本插入到最后一行,而不需要/pattern/最后一行。
注意:此命令只会在最后一行之前添加一行文本,而不是文件。如果要在最后一行之前插入文件的内容。
如果你想添加一个完整的文件(如果它在 中就不需要sed),我会使用这个:
head -n-1 first_file.txt && cat inserted_file.txt && tail -n1 first_file.txt
Run Code Online (Sandbox Code Playgroud)
这应该只是最后一行显示的一切,那么cat的的inserted_file.txt,然后显示的最后一行first_file.txt。
既然你在,gnu sed你可以使用
'e [COMMAND]'
This command allows one to pipe input from a shell command into
pattern space.
Run Code Online (Sandbox Code Playgroud)
在纬度$线上:
sed '$e cat insert.txt' file
Run Code Online (Sandbox Code Playgroud)
随着ed(替换,p用w,如果你想编辑就地):
ed -s file<<IN
- r insert.txt
,p
q
IN
Run Code Online (Sandbox Code Playgroud)
或者
ed -s file <<< $'-1 r insert.txt\n,p\nq\n'
Run Code Online (Sandbox Code Playgroud)
当ed读取file的当前地址被设定为LA$吨线。-(或-1) 将当前地址设置为 (即$-1)之前的一行,并r在insert.txt当前行之后读入。,p打印文本缓冲区的内容(正如我所说,替换为w以保存更改)并q退出编辑器。
| 归档时间: |
|
| 查看次数: |
17778 次 |
| 最近记录: |