我无法理解这个 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
但我有几个问题:
1s/^$//p
?据我了解,即使第一行为空,它也不做任何事情/./,/^$/
只在第一次^$
喜欢之前Line #1\n\n
匹配而不是匹配Line #1\n\n\n
?为了澄清问题 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)
(现在好像不贪心了)
为什么我不能做这样的事情:
tail -n 5 small.txt | diff small.txt
Run Code Online (Sandbox Code Playgroud)
我想像第二个参数一样传递第一个命令的执行结果,而不是独立输入。我该怎么做?