小编sta*_*one的帖子

请解释一下sed脚本

我无法理解这个 sed 脚本是如何工作的:

echo -e "Line #1\n\n\n\nLine #2\n\n\nLine #3" | sed '1s/^$//p;/./,/^$/!d'
Run Code Online (Sandbox Code Playgroud)

它抑制重复的空行,例如cat -s 但我有几个问题:

  1. 为了什么1s/^$//p?据我了解,即使第一行为空,它也不做任何事情
  2. 这是否/./,/^$/只在第一次^$喜欢之前Line #1\n\n匹配而不是匹配Line #1\n\n\n
  3. 默认情况下,sed 中的范围不是贪婪的吗?

为了澄清问题 3,我尝试了下一个测试:

echo -e "Line #1\n\n\n\nLine #2\n\n\nLine #3" | sed -n '/#/,/#/p'

结果是:

Line #1



Line #2
Line #3
Run Code Online (Sandbox Code Playgroud)

(所以,它是贪婪的)

但是当我尝试时:

echo -e "Line #1\n\n\n\nLine #2\n\n\nLine #3" | sed -n '/#1/,/#/p'
Run Code Online (Sandbox Code Playgroud)

结果是:

Line #1



Line #2
Run Code Online (Sandbox Code Playgroud)

(现在好像不贪心了)

sed regular-expression

3
推荐指数
1
解决办法
454
查看次数

管道问题

为什么我不能做这样的事情:

tail -n 5 small.txt | diff small.txt
Run Code Online (Sandbox Code Playgroud)

我想像第二个参数一样传递第一个命令的执行结果,而不是独立输入。我该怎么做?

bash pipe diff

0
推荐指数
1
解决办法
60
查看次数

标签 统计

bash ×1

diff ×1

pipe ×1

regular-expression ×1

sed ×1