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

Regex 使用bash、sed或awk从文件中的字符串(以特定格式)提取子字符串,regex,bash,awk,sed,grep,Regex,Bash,Awk,Sed,Grep,我有一个输入文件,其示例如下所示:(?U0?U2?U9?U11?U21)我想将?U之后的所有数字提取到输出文件中,如下所示:0 2 9 11 21请在这方面帮助我,我是新手 谢谢您可以使用grep,但它会在每行生成输出 grep -oP '\?U\K\d+' file 或 使用sed,您可以执行以下操作: s='(?U0 ?U2 ?U9 ?U11 ?U21)' sed 's/?U\([0-9]\+\)/\1/g; s/[()]//g' <<< "$s" 0 2 9 11 21

我有一个输入文件,其示例如下所示:
(?U0?U2?U9?U11?U21)

我想将
?U
之后的所有数字提取到输出文件中,如下所示:
0 2 9 11 21

请在这方面帮助我,我是新手


谢谢

您可以使用grep,但它会在每行生成输出

grep -oP '\?U\K\d+' file

使用sed,您可以执行以下操作:

s='(?U0 ?U2 ?U9 ?U11 ?U21)'
sed 's/?U\([0-9]\+\)/\1/g; s/[()]//g' <<< "$s"
0 2 9 11 21
s='(?U0?U2?U9?U11?U21)'
sed's/?U\([0-9]\+\)/\1/g;s/[()]//g'简单sed

echo "(?U0 ?U2 ?U9 ?U11 ?U21)" | sed 's/[()?U]//g'  
输出
02991121

删除所有不需要的字符,如果需要其他字符,可以将其放入集合[…]

还是更普遍

echo "(?U0 ?U2 ?U9 ?U11 ?U21)" | sed 's/[^0-9 ]*//g'   
使用grep删除所有非数字字符(而不是空格)

out="$(grep -oP '(?<=\?U)\d+' filepath |tr -s '\n' ' ')"
out="${out% }"
echo "$out" >outfilepath
out=“$(grep-oP'(?)?
out="$(grep -oP '(?<=\?U)\d+' filepath |tr -s '\n' ' ')"
out="${out% }"
echo "$out" >outfilepath