2015-04-03 269 views
1

我已经尝试了两个不同的sed命令对称为“file1.txt”的文本文件。 我收到了相同的结果或输出。我不明白的是“G”选项的含义或用法!我在网上搜索,但我找不到一个好的答案!'G'用sed命令做什么?

这里有两个命令:

sed 'G' file1.txt 
sed '/^$/d;G' file.txt 

两个命令都给出相同的输出!他们在文本文件中的每一行之间创建一行间隔! 我知道'^ $'是指不包含任何内容的行,但'G'是做什么的。例如,如果我把'd'代替'G',所有的空行都会被删除!

+3

您应该阅读'man sed' – nu11p01n73R 2015-04-03 16:03:55

+0

@ nu11p01n73R我已阅读sed的手册页,但解释非常有限或很短! – 2015-04-03 16:04:47

+0

@ nu11p01n73R您正在表达的看法是,没有必要进行SO或对话,也没有任何'双方手册页。 smh一点 – iletras 2017-01-04 21:13:12

回答

0

按照sed man

g 

与保留空间的内容替换模式空间的内容。

G 

将新行添加到模式空间的内容,然后将保留空间的内容附加到模式空间的内容。

3

Get with g or G

而不是用交换模式空间保留空间,你可以用“G”命令将保留空间复制到模式空间。这会删除模式空间。如果你想追加到模式空间,使用“G”命令。这会向模式空间添加一个新行,并在新行之后复制保留空间。

也就是说,不是交换当前内容的保留和模式空间(当前行等),你可以把模式空间并将其复制到保存空间中(或者替换或附加到保留空间该过程)。

这两个sed命令属于惯用的sed单线程,你可以找到online,它们只对某些文件(没有空行的文件)做同样的事情。

# double space a file 
sed G 

# double space a file which already has blank lines in it. Output file 
# should contain no more than one blank line between lines of text. 
sed '/^$/d;G'