如何仅提取仅包含1个数据的列,以:
分隔demo@example.com:bo:mo
demo1@example.com::
demo2@example.com::
期望的输出
demo1@example.com::
demo2@example.com::
我的上一个命令试试
sed "${var%%::*}::"
答案 0 :(得分:0)
关注简单awk
可能对您有所帮助。
awk -F":" '{for(i=1;i<=NF;i++){if($i){count++}};if(count==1){print};count=""}' Input_file
或者以不同的形式使用相同的逻辑。
awk -F":" '{for(i=1;i<=NF;i++){count=$i?++count:count}} count==1{print} {count=""}' Input_file
答案 1 :(得分:0)
啊 - 从评论中我推断,除了第一个外,所有字段都是空的。然后更简单:
echo "demo@example.com:bo:mo
demo1@example.com:bo:
demo2@example.com::" | sed -n "/::/p"
sed -n表示默认情况下不打印&#39;。 / :: /是要查找的模式,&#39; p&#39;如果图案匹配,则表示打印。
只打印第一列的内容:
echo "demo@example.com:bo:mo
demo1@example.com:bo:
demo2@example.com::" | sed -rn "s/(.*)::/\1/p"
demo2@example.com
-r表示扩展的正则表达式,这对于在冒号之前捕获一切的圆括号非常重要。 \ 1是打印的反向引用。