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