我有一个大文本文件,其中一部分如下所示(编辑后的值):
JULIANA XXXX006060 LI1033322 THC BRL 730.00
XXXX006296 AA1004737 THC BRL 1,740.00
SANTOS JULIANA XXXX006668 AA1004786 THC BRL 8,150.00
SANTOS JULIANA CABINDA XXXX006697 AA1004777 THC BRL 2,325.00
SANTOS JULIANA XXXX006699 AA1004790 THC BRL 2,325.00
JULIANA BATA XXXX006141 CCC012946 THC BRL 1,460.00
JULIANA BATA XXXX006153 CCC013054 THC BRL 870.00
JULIANA XXXX006269 CCC013105 THC BRL 870.00
JULIANA XXXX006295 CCC013083 THC BRL 870.00
JULIANA BATA XXXX006305 CCC013043 THC BRL 1,460.00
我想总是抓取(用cut
或awk
或其他东西)以 开头的字符串XXXX00
,但它永远不会在同一个字段号中。
我怎样才能在 shell 脚本中做到这一点?
答案1
只grep
为它:
grep -oE 'XXXX00[0-9]*' file
-o
:仅打印匹配部分。-E
:激活扩展正则表达式。[0-9]*
:在要搜索的字符串之后,只能出现数字。
答案2
看起来您想要右边的第 5 个字段,所以
awk '{print $(NF-4)}' file
答案3
grep
与 PCRE 一起使用:
% grep -Po '(^|\s)\KXXXX00[^\s]*(?=(\s|$))' file.txt
XXXX006060
XXXX006296
XXXX006668
XXXX006697
XXXX006699
XXXX006141
XXXX006153
XXXX006269
XXXX006295
XXXX006305
在这种情况下,您可以不用-w
(word),请注意,单词组成字符被视为[[:alnum:]_]
:
% grep -wo 'XXXX00[^ ]*' file.txt
XXXX006060
XXXX006296
XXXX006668
XXXX006697
XXXX006699
XXXX006141
XXXX006153
XXXX006269
XXXX006295
XXXX006305
答案4
sed 's/[^0]* *\([^ ]*\).*/\1/' <in >out
看起来字段计数不同,因为您有一个人员列表,并且他们的姓名数量不同。但可能它们都没有包含 0 的名称,因此只需完全剪切掉第一个包含 1 的空格分隔字符串,保存它,然后剪切后面的所有内容。