0

我想提取前两个管道之间的东西:

| a650f360-a29d-4562-b46f-024fe15aa7dc | emi-ubuntu-12.04.2-server-amd64-08152013           | ACTIVE |

输出应该是:

 a650f360-a29d-4562-b46f-024fe15aa7dc 

我有一个正则表达式,我打算将 sed 用于:^\|\s*(.*?)\s*\|

但根据正则表达式计算器,它也让我得到了管道。我该如何摆脱它?

4

3 回答 3

5

Cut 可能比正则表达式更容易理解。为什么不

cut -d\| -f2

?

于 2013-08-16T00:25:09.370 回答
1
sed 's/^[^|]*|\([^|]*\)|.*/\1/'

这匹配开头的任何非管道(示例数据中没有任何内容),管道,捕获不是管道的内容,匹配另一个管道和末尾的任何内容,并将其替换为捕获的内容。

于 2013-08-16T00:10:20.867 回答
0

仅重击。在循环中,这可以使用数组来完成:

while IFS='|'; read -a line ; do
  echo ${line[1]}            # with leading/trailing blanks
  echo ${line[1]// /}        # without leading/trailing blanks
done < "$infile"
于 2013-08-16T06:53:34.697 回答