我想在前两个管道之间提取内容:
| a650f360-a29d-4562-b46f-024fe15aa7dc | emi-ubuntu-12.04.2-server-amd64-08152013 | ACTIVE |
输出应为:
a650f360-a29d-4562-b46f-024fe15aa7dc
我有一个正则表达式,我将使用sed:^\|\s*(.*?)\s*\|
但根据正则表达式计算器,它也可以获得管道。我怎么摆脱它?
答案 0 :(得分:5)
剪切可能比正则表达式更容易理解。为什么不
cut -d\| -f2
答案 1 :(得分:1)
sed 's/^[^|]*|\([^|]*\)|.*/\1/'
匹配开头的任何非管道(示例数据中没有任何内容),管道,捕获不是管道的东西,匹配另一个管道和最后的任何东西,并用捕获的东西替换它。
答案 2 :(得分:0)
仅限Bash。在循环中,这可以使用数组来完成:
while IFS='|'; read -a line ; do
echo ${line[1]} # with leading/trailing blanks
echo ${line[1]// /} # without leading/trailing blanks
done < "$infile"