[英]Extract substring from strings (in a particular format) from a file using bash or sed or awk
I have an input file, an example of which is shown below : 我有一个输入文件,其示例如下所示:
(?U0 ?U2 ?U9 ?U11 ?U21)
I want to extract all the numbers after ?U
to an output file as: 我想将?U
之后的所有数字提取为以下输出文件:
0 2 9 11 21
Please help me in this regard, I am new to it. 在这方面请帮助我,我是新手。
Thanks 谢谢
You could use grep but it produces output in each per line. 您可以使用grep,但每行每行都会产生输出。
grep -oP '\?U\K\d+' file
or 要么
$ echo '(?U0 ?U2 ?U9 ?U11 ?U21)' | grep -oP '\?U\K\d+' | paste -s -d " " -
0 2 9 11 21
Using sed you can do: 使用sed,您可以执行以下操作:
s='(?U0 ?U2 ?U9 ?U11 ?U21)'
sed 's/?U\([0-9]\+\)/\1/g; s/[()]//g' <<< "$s"
0 2 9 11 21
simple sed 简单sed
echo "(?U0 ?U2 ?U9 ?U11 ?U21)" | sed 's/[()?U]//g'
output 产量
0 2 9 11 21 0 2 9 11 21
deleting all unneeded characters, you can put in set [...] if needed another characters 删除所有不需要的字符,如果需要,您可以在集合中放置其他字符
or more universal 或更普遍
echo "(?U0 ?U2 ?U9 ?U11 ?U21)" | sed 's/[^0-9 ]*//g'
deleting all non-digit characters (and not space) 删除所有非数字字符(而不是空格)
With grep: 使用grep:
out="$(grep -oP '(?<=\?U)\d+' filepath |tr -s '\n' ' ')"
out="${out% }"
echo "$out" >outfilepath
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.