我想知道如何在长管道中用abc
替换空结果。
因此,如果我使用sed
和grep
以及其他内容过滤大的.txt文件。
有没有办法在这个管道的末尾我替换一个空的结果?
因此,如果我在文件中找不到我的模式,我会得到abc
我在sh工作,希望它包含在长管中,而不使用特殊的东西。 我试过了:
cat myfile.txt | grep 'blabla.*' | sed 's/^$/abc/g'
和
`cat myfile.txt | grep 'blabla.*' | sed 's//abc/g'`
。
答案 0 :(得分:6)
我想你是说如果grep
没有产生匹配,你想要看到“abc”。我不知道这是否算作“特殊的东西”,但你可以这样做:
grep 'blabla.*' myfile.txt || echo abc
这在管道中可以正常工作:
cmd1 | cmd2 | { grep 'blabla.*' || echo abc; } | cmd3 | cmd4
事实上,将更复杂的逻辑放在管道中也可以正常工作,尽管你不经常看到这种风格:
cmd1 |
if grep blabla.*; then : ; else echo abc; fi |
cmd2
答案 1 :(得分:1)
我会使用一个awk
命令:
awk '/blabla/{print;found=1}END{if(!found){print "not found"}}' myfile.txt
答案 2 :(得分:0)
使用
tee >(read || echo "abc")
说明: 您可以使用
查找空输入pipeline_with_sed | grep -q . || echo "abc"
这有不同的问题 当输出为空行时,它不为空。所以你应该测试任何数据:
pipeline_with_sed | read || echo "abc"
这将给你的" abc"用于管道的空输出。
现在你想在有东西时看到原始输出
使用tee
,您可以将输出重定向到文件和另一个进程
重定向到文件也可以替换为写入另一个程序。
pipeline_with_sed | tee >(read || echo "abc")
答案 3 :(得分:0)
这可能适合你(GNU sed):
sed '/blabla/q;$!d;cabc
如果发现字符串打印并退出。否则,在文件末尾将最后一行更改为abc
。