sed -i'1d'是做什么的?


28

我了解这sed是操作文本文件的命令。

从我的Google搜索中,似乎-i意味着要对文件本身执行操作,这是正确的吗?

'1d'

Answers:


43

sed

  • -i 选项将就地编辑输入文件

  • '1d' 将删除输入文件的第一行

例:

% cat file.txt 
foo
bar

% sed -i '1d' file.txt 

% cat file.txt        
bar

请注意,在大多数情况下,使用此-i选项进行备份是一个好主意,这样可以在发生任何意外更改时备份原始文件。

例如,如果您这样做:

sed -i.orig '1d' file.txt 

原始文件将保留为file.txt.orig,修改后的文件将保留为file.txt


4
您也可以先进行“空转” -i,然后先查看实际情况,然后再使用它-i来实际更改文件。
Baard Kopperud '16

15

1. a)

sed '1d' file.txt

打印的内容file.txt; 不包括第一行;到标准输出。


2. a)

sed -i    '1d' file.txt # GNU, NetBSD, OpenBSD
sed -i '' '1d' file.txt # FreeBSD, macOS

打印的内容file.txt; 不包括第一行;回到file.txt; 覆盖原件。


2. b)

sed -i.back '1d' file.txt

file.txt.back在进行更改之前,创建原始备份(如)。除FreeBSD外sed,后缀(here .back)必须附加到-i选项(在同一参数中,-iand 之间没有空格.back)。


3. a)

sed '2d' file.txt

打印的内容file.txt; 不包括第二行;到标准输出。
(指定任何数字将删除相应的行)。

也与-i标志兼容。


3. b)

sed '1!d' file.txt

打印的内容file.txt; 不包括所有第一行; 到标准输出。
(换句话说,打印第一行)。

也与-i标志兼容。


3. c)

sed '$d' file.txt

打印的内容file.txt; 不包括最后一行;到标准输出。

也与-i标志兼容。


仅供参考:除非您创建备份(2.b)或使用备份旁路方法2.c),否则BSD版本(即macOS事实上的标准)通常将无法配合使用。GNU版本不会提示您这样做。它将毫不犹豫地破坏性地编辑和覆盖现有文件。
声音

4

sed -h有:

  -i[SUFFIX], --in-place[=SUFFIX]
             edit files in place (makes backup if SUFFIX supplied)

和“对文件本身执行操作”。绝对是。

man说:“ Sed是流编辑器。流编辑器用于对输入流(文件或来自管道的输入)执行基本的文本转换。

作为您的问题,

sed -i '1d' file_name

表示:删除文件"file_name"中的第一行并备份到文件。(就像编辑文件并直接删除第一行一样。)

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.