如何使用cut命令从文件中提取包含分隔符的字段

时间:2017-08-30 06:57:13

标签: bash shell unix sh cut

在Unix中,假设一个文件包含5个字段&数据如:

"112233"|"Roshan"|"25"|" FAX 022 3987789 \| TEL 77766288892 \| abc "|"Male"

需要提取第4个字段。使用下面的

column_value=`echo $line | cut -f4 -d'|'`

只有我们才能获得" FAX 022 3987789 \

但需要" FAX 022 3987789 \| TEL 77766288892 \| abc "作为第4列值。

2 个答案:

答案 0 :(得分:1)

当作业涉及解析输入字符串/文件所需的多字符去限制器时,

cut不是作业的正确工具。

您可以使用GNU Awk with FPAT来定义记录中每个字段的外观。您可以将FPAT写为正则表达式常量,在这种情况下,下面的内容应该可以正常工作。

FPAT = "(\"[^\"]+\")"

Awk命令中使用它,

line='"112233"|"Roshan"|"25"|" FAX 022 3987789 \| TEL 77766288892 \| abc "|"Male"'
awk '
BEGIN {
    FPAT = "(\"[^\"]+\")"
}{print $4}' <<<"$line"

生成输出

" FAX 022 3987789 \| TEL 77766288892 \| abc "

Regular Expression - Test results

答案 1 :(得分:0)

您可以添加以下两个额外字段

echo $line | cut -f 4,5,6 -d\|

或者您可以使用sed替换&#34; |&#34;带有不同字符的分隔符(例如制表符)

echo $line | sed s/\"\|\"/\t/g | cut -f 4