使用 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
语法(分组括号和 ?
量词需要反斜杠);如果您在不同的平台上,请相应地进行调整。
我正在使用 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
语法(分组括号和 ?
量词需要反斜杠);如果您在不同的平台上,请相应地进行调整。