不匹配时的sed输出

时间:2011-03-22 07:31:05

标签: bash

我想从一行中提取一些字段,例如:

echo "aaa,bbb-ccc,ddd" | sed 's/.*,\(.*\)-\(.*\),.*/\1 \2/'

它将按照我的预期输出"bbb ccc"。但如果输入行不是模式,

echo "aaa,bbb,ccc,ddd" | sed 's/.*,\(.*\)-\(.*\),.*/\1 \2/'

它将输出整行"aaa,bbb,ccc,ddd"。我想要的是不匹配时,什么都不输出。我该怎么办?

3 个答案:

答案 0 :(得分:9)

sed -n 的/。,(。) - (。),. / \ 1 \ 2 / p

$ echo "aaa,bbb-ccc,ddd" | sed -n 's/.*,\(.*\)-\(.*\),.*/\1 \2/p'
bbb ccc
$ echo "aaa,bbb,ccc,ddd" | sed -n 's/.*,\(.*\)-\(.*\),.*/\1 \2/p'
$

' - n'默认禁用模式空间的打印。 p在匹配时打印sed

答案 1 :(得分:3)

echo "a-b" | sed -n 's/-/#/p'
a#b

echo "a_b" | sed -n 's/-/#/p'

-n表示默认为“无输出”。 / p表示打印

答案 2 :(得分:1)

如果是这种情况,请考虑一种更简单的方法

echo "aaa,bbb-ccc,ddd" | awk -F"," '$2 ~ /-/{ print $2}'