sed一个空字符串并替换它

时间:2017-06-19 15:18:17

标签: linux shell unix sed sh

我想知道如何在长管道中用abc替换空结果。

因此,如果我使用sedgrep以及其他内容过滤大的.txt文件。 有没有办法在这个管道的末尾我替换一个空的结果? 因此,如果我在文件中找不到我的模式,我会得到abc

我在sh工作,希望它包含在长管中,而不使用特殊的东西。 我试过了:

cat myfile.txt | grep 'blabla.*' | sed 's/^$/abc/g'

`cat myfile.txt | grep 'blabla.*' | sed 's//abc/g'`

4 个答案:

答案 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