通过在 bash 中返回该行上的所有内容,将该行设为空白

通过在 bash 中返回该行上的所有内容,将该行设为空白

我想更改一个文本文件。假设第 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
  1. 添加到第 22 行之后
  2. (空行)
  3. .-- 结束附加输入
  4. 将文件写入磁盘
  5. 退出编辑

或者,在第 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

相关内容