我正在尝试从某些文本中删除模式。我的意思是:
从[1426467605000,19.44]
到19.44
这是我的输入文本文件:
[1426467605000,19.44],[1426467965000,19.44],[1426468325000,19.38],[1426468685000,19.38],[1426469045000,19.38],[1426469405000,19.38],[1426469764000,19.38],[1426470124000,19.38],[1426470484000,19.38],[1426470845000,19.31],[1426471205000,19.31],[1426471565000,19.31],[1426471925000,19.31],[1426472285000,19.31],[1426472645000,19.31],[1426473005000,19.31],[1426473365000,19.31],[1426473725000,19.31],[1426474085000,19.31],[1426474445000,19.25],[1426474805000,19.25],[1426475164000,19.25],[1426475524000,19.25],[1426475884000,19.55],[1426476245000,19.25],[1426476605000,19.25],[1426476965000,19.25],[1426477325000,19.25],[1426477685000,19.19],[1426478045000,19.19],[1426478405000,19.19],[1426478764000,19.19],[1426479124000,19.19],[1426479484000,19.19],[1426479844000,19.19],[1426480204000,19.13],[1426480564000,19.13],[1426480924000,19.19],[1426481284000,19.19],[1426481644000,19.19],[1426482005000,19.19],[1426482365000,19.19],[1426482725000,19.19],
这是我想要的输出:
19.44
19.44
19.38
19.38
19.38
etc.
答案 0 :(得分:4)
这个grep行应该这样做:
grep -oP '[^,]*(?=])'
简而言之,此行提取,
和]
之间的文字,这是您想要的内容。
答案 1 :(得分:3)
使用grep
:
grep -oE '[0-9]+\.[0-9]+' file
模式搜索一个或多个数字,后跟一个点,再一个或多个数字。
-o
使grep输出仅匹配,而不是输出匹配的整行。 -E
允许我们使用posix扩展正则表达式,这使我们无法逃脱+
。
另一种方法是像这样使用awk
:
awk -F, '{print $2}' RS='\\[|\\],|\\],\\[' file
此命令执行更多语义分析,它返回记录中的第二个值。它按[
(行首)或],
或],[
分隔记录。它打印记录的第二个字段,其中字段由,
分隔。
如果你想允许在最后没有,
的情况下关闭一行的最后一条记录,你只需将模式修改为:
awk -F, '{print $2}' RS='\\[|\\],?|\\],\\[' file
使记录分隔符末尾的逗号可选。
答案 2 :(得分:2)
awk
替代方案:
awk '$0~FS{print $1}' RS=',' FS=']' inputfile
RS=','
:将 R ecord S eparator更改为逗号。
FS=']'
:将 F ield S eparator设置为]
。
$0~FS
:如果当前记录中存在FS
打印第一个字段(避免输出中的FS)
答案 3 :(得分:1)
您可以使用grep
。
$ grep -oP ',\K[^\]\[]*(?=\])' file
19.44
19.44
19.38
19.38
19.38
19.38
19.38
19.38
这个正则表达式将获取方括号内的最后一个字符串。
,
与第一个逗号匹配。\K
会丢弃之前匹配的字母逗号。[^\]\[]*
否定字符类,匹配任何字符但不匹配]
或[
,零次或多次。(?=\])
肯定前瞻,断言匹配必须后跟]
个字符。答案 4 :(得分:1)
SED
sed 's/\[[^,]\+,\([^]]\+\)\]/\1/g; s/,/\n/g'
第一个正则表达式查找:文字开括号,一些非逗号字符,一个逗号,捕获括号,一些非近括号字符,结束捕获和一个文字紧密括号。它用捕获的文本替换所有这些。然后,剩余的逗号将被换行替换。
答案 5 :(得分:1)
你也可以使用sed和coreutils:
<infile tr -d '][' | tr , '\n' | sed '1d; n; d'
输出:
19.44
19.44
19.38
19.38
19.38
.
.
.
tr
删除括号并用换行符替换逗号。 sed
然后删除第一行和之后的每一行。
答案 6 :(得分:0)
使用GNU awk进行多字符RS:
$ awk -v RS='[]],[[\n]' -F, '{print $2}' file
19.44
19.44
19.38
19.38