Regex 如何使用sed在shell中的行中切换带数字的单词

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 如何实现

我有一个关于如何用字符或单词切换数字(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

如何实现所需的输出?

您需要将括号反斜杠以将其分组:

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'