我想更改一个文本文件。假设第 22 行有一些文本,我想将第 22 行设为空白,并将第 22 行的文本向下移动到第 23 行。为了说明这一点,我想将其转为 ( printf 'Some %d text\n' {1..23}
):
Some 1 text
Some 2 text
Some 3 text
Some 4 text
Some 5 text
Some 6 text
Some 7 text
Some 8 text
Some 9 text
Some 10 text
Some 11 text
Some 12 text
Some 13 text
Some 14 text
Some 15 text
Some 16 text
Some 17 text
Some 18 text
Some 19 text
Some 20 text
Some 21 text
Some 22 text
Some 23 text
进入这个:
Some 1 text
Some 2 text
Some 3 text
Some 4 text
Some 5 text
Some 6 text
Some 7 text
Some 8 text
Some 9 text
Some 10 text
Some 11 text
Some 12 text
Some 13 text
Some 14 text
Some 15 text
Some 16 text
Some 17 text
Some 18 text
Some 19 text
Some 20 text
Some 21 text
Some 22 text
Some 23 text
我该怎么做?
答案1
sed -i '21 a\
' yourfile
21 是第 1 行的前一行号完整示例,用于在第 1 行之后附加 (a) 空白行:
francois@zaphod:~$ cat toto
Some text
Some more text
Some other text
francois@zaphod:~$ sed -i '1 a\
' toto
francois@zaphod:~$ cat toto
Some text
Some more text
Some other text
francois@zaphod:~$
那么文件有 4 行长(包括空白行)
答案2
使用标准编辑器ed
,只需将相应的命令打印到其输入中:
printf '%s\n' 22a '' . w q | ed -s file
- 添加到第 22 行之后
- (空行)
.
-- 结束附加输入- 将文件写入磁盘
- 退出编辑
或者,在第 23 行之前插入,23i
而不是22a
。
答案3
您可以将以下内容与 sed 一起使用:
$ sed -e '22{x;G;}' file
这将在第 22 行之前放置一个空行(换行符)。第22行之前的内容将被下推。但请注意,此操作将修改保留空间的内容。要保留 ,请使用以下变体:
$ sed -e '22{x;p;x;}' file
或者使用 awk / perl 实用程序:
$ awk 'NR==22{$0 = RS $0}1' file
$ perl -pe '22..22&&s/^/\n/' file