使用 ubuntu 中的命令从文件中获取特定字段值

Get a particular field value from file using commands in ubuntu

我正在使用 Ubuntu14。 我想从文件中获取字段(F1)值(,分离文件) 但问题是现场位置没有固定。 并且只想使用 Linux.

中的命令

这里我附上例子:

F2=xyz, F3=123, F1=json, F4=格式, F5=331
F1=csv, F2=xyz, F3=123, F4=格式, F5=240
F2=xyz, F3=123, F1=xml, F4=格式, F5=128
F2=xyz, F3=123, F4=lang, F1=java, F5=350
F2=xyz, F1=.net, F3=123, F4=lang, F5=500
F1=csv, F2=xyz, F3=123, F4=格式, F5=240
F2=xyz, F3=123, F1=字符串, F4=格式, F5=60
F2=xyz, F3=123, F4=格式, F1=byte, F5=140

输出应该是:

json
.csv
xml
java
.net
.csv
字符串
字节

你可以试试下面的命令

grep -o '[^ ]*F1[^ ]*' FILENAME | cut -c4- | rev | cut -c2- | rev

假设您提供了正确的文件路径位置,manoj 所说的有效。您还可以使用 sed 截断字符,例如:

  $ grep -o 'F1=[^,]*' /path/to/file | cut -c4-
  $ grep -o '[^ ]*F1[^ ]*' /path/to/file | sed "s/^F1=\(.*\),$//"

更新,这也适用于 ubuntu - PCRE

  $ grep -oP 'F1=\K([^,]*)' /path/to/file

只需更换不需要的部分。

sed 's/^\(.*, \)\?F1=//;s/, .*//' file

第一个表达式替换 F1= 标记之前的所有内容,第二个表达式替换值之后的所有内容。我假设传统的 Linux sed 语法(分组括号和 ? 量词需要反斜杠);如果您在不同的平台上,请相应地进行调整。