Regex 如何使用sed在shell中的行中切换带数字的单词
我有一个关于如何用字符或单词切换数字(1-无穷大)的问题: 这是我的密码:Regex 如何使用sed在shell中的行中切换带数字的单词,regex,bash,shell,sed,Regex,Bash,Shell,Sed,我有一个关于如何用字符或单词切换数字(1-无穷大)的问题: 这是我的密码: sed 's/ ([a-z]*) ([0-9]*)/\2 \1/g'> $file_output 所以我的输出(在使用上面的命令之前)如下 以及使用sed命令的预期输出: a 1 adam 45 但该行无法工作,特别是由于语法错误。下面是出现的错误: sed: -e expression #1, char 28: invalid reference \2 on `s' command's RHS 如何实现
sed 's/ ([a-z]*) ([0-9]*)/\2 \1/g'> $file_output
所以我的输出(在使用上面的命令之前)如下
以及使用sed命令的预期输出:
a 1
adam 45
但该行无法工作,特别是由于语法错误。下面是出现的错误:
sed: -e expression #1, char 28: invalid reference \2 on `s' command's RHS
如何实现所需的输出?您需要将括号反斜杠以将其分组:
s/\([a-z]*\) \([0-9]*\)/\2 \1/g'
或者,如果您的sed支持扩展正则表达式,请使用
-r
或-E
表示您正在使用扩展正则表达式。使用sed的/\(.*)\(.*)/\2\1/'
是将任何字母数字转换为另一个字母数字的通用方法 使用扩展正则表达式支持:sed-r's/([a-z]*)([0-9]*)/\2\1/g'$file\u output“
使用-r/-E
或转义括号。是否总是有两个字段,并且总是需要切换它们?如果是这样,您可以使用不检查它们是否为数字的awk'{print$2,$1}文件
@TomFenech。您的sed表达式表示搜索字母字符串,后跟数字字符串(([a-z]*)([0-9]*)
),并将它们切换(\2\1
),但要切换您的输入(即“在使用上述命令之前”)数字后面是名称吗?使用awk'{print$2,$1}'
是切换任意两个字段的常规方法,但这不是您最初的要求。
s/\([a-z]*\) \([0-9]*\)/\2 \1/g'