我有xml文本文件,其中包含由制表符/空格分隔的多个数字(3)的行,我想从中单独选择每组数字。
自:
<tagname1> 110.0912 99.1234 55.1326 </tagname1>
结果:
110.0912
和
99.1234
和
55.1326
我想使用sed,awk,grep等perl也很好。看似简单,但无法找到更清晰的线条。我试过了:
more FILENAME | grep tagname1 | grep -E -o "[0-9]+*\.[0-9]+" | head -n 1
答案 0 :(得分:2)
perl -MRegexp::Common -nE 's/<.*?>//g; say for /($RE{num}{real})/g' file
答案 1 :(得分:1)
您可以使用grep
-o
选项。
$ cat file
<tagname1> 110.0912 99.1234 55.1326 </tagname1>
$ grep -oE '\b[0-9.]+\b' file
110.0912
99.1234
55.1326
\b
定义单词边界[0-9.]+
是一个字符类,建议匹配数字.
一次或多次-o
选项仅打印匹配的模式答案 2 :(得分:0)
您可以使用awk
awk '{print $2,$3,$4}' OFS="\n" file
110.0912
99.1234
55.1326
答案 3 :(得分:0)
awk -v which=2 '/<tagname1>(([0-9]*(\.[0-9]*)?)|[ \t])*<\/tagname1>/ {print $(which+1)}' input.txt
使用变量which
选择要打印的数字,在此示例中,它将打印第二个数字which=2
input.txt中:
<tagname1> 110.0912 99.1234 55.1326 </tagname1>
答案 4 :(得分:0)
$ cat file
<tagname1> 110.0912 99.1234 55.1326 </tagname1>
$ awk -v tag="tagname1" -v nr=1 '$0~"<"tag">"{print $(nr+1)}' file
110.0912
$ awk -v tag="tagname1" -v nr=2 '$0~"<"tag">"{print $(nr+1)}' file
99.1234
$ awk -v tag="tagname1" -v nr=3 '$0~"<"tag">"{print $(nr+1)}' file
55.1326