我有一个名为"list“的文本文件,其中包含一些随机单词:
he
she
we
his
her
with
his this this -- this
this我运行了sed命令:
sed '1,4p' list我认为sed命令要做的是列出这个文件中的前4个单词,所以我认为输出应该是:
he
she
we
his但结果却是:
he
he
she
she
we
we
his
his
her
with
his this this -- this
this谁能告诉我我做错了什么,或者为什么输出是不同的?
发布于 2015-04-09 17:26:43
您忘记了sed的默认操作是打印每个模式空间(行),因此抑制添加-n开关所需的默认行为。
sed -n '1,4p' list发布于 2015-04-09 17:29:14
用这个:
sed -n 1,4p list或者这个:
sed '1,4!d' list更多示例
发布于 2015-04-27 02:04:37
您的脚本表达式将依次在每一行执行。
要在一行上执行表达式,sed将首先将其复制到模式空间。
然后,执行所有表达式,每个表达式使用模式空间作为输入,并将结果写回模式空间。
因此,通常情况下,当完成行的工作步骤时,我们在模式空间中有一个最后的字符串。在大多数情况下,我们只希望将其作为输出,例如在被多个s//命令更改之后。
因为它通常很有用,所以sed打印最后的模式空间,就好像它会附加一个p表达式一样。
您已经可以看到这会导致命令的输出。
p打印四行匹配行的模式空间注意,它输出的是“所有行和前四行”,而不是“所有行而不是前四行”。
因此,在重复行中,第一行是打印的,第二行是默认打印的。
默认打印模式空间的sed选项-n (--quiet)开关:
sed -n 1,4p list要查看您的原始命令在做什么,我们可以使两种类型的行看起来不同:我们在最后打印它之前更改模式空间,方法是用-作为前缀:
$ sed -e '1,4p' -e 's/^/- /' list
he
- he
she
- she
we
- we
his
- his
- her
- with
- his this this -- this
- this(需要-e选项来提供多个表达式。的/^/- /‘在行的开头没有用-替换任何东西。)
https://unix.stackexchange.com/questions/195340
复制相似问题