简体   繁体   English

使用bash或sed或awk从文件的字符串(以特定格式)中提取子字符串

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM