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