我想从一行中提取一些字段,例如:
echo "aaa,bbb-ccc,ddd" | sed 's/.*,\(.*\)-\(.*\),.*/\1 \2/'
它将按照我的预期输出"bbb ccc"
。但如果输入行不是模式,
echo "aaa,bbb,ccc,ddd" | sed 's/.*,\(.*\)-\(.*\),.*/\1 \2/'
它将输出整行"aaa,bbb,ccc,ddd"
。我想要的是不匹配时,什么都不输出。我该怎么办?
答案 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}'