我有一个看起来像这样的字符串:
755="Some String In Here"
我想交换这两个字段,这样就可以了:
"Some String In Here"=755
如何使用sed或其他命令行工具执行此操作?
答案 0 :(得分:2)
通过awk,
$ echo '755="Some String In Here"' | awk -F= -v OFS="=" '{print $2,$1}'
"Some String In Here"=755
$ echo '755="Some String In Here"' | awk 'BEGIN{FS=OFS="="}{print $2,$1}'
"Some String In Here"=755
在BEGIN块中,我们将Field Separator和输出Field分隔符设置为=
符号。最后,我们打印第2列加上输出字段分隔符值,
加上第1列值。
答案 1 :(得分:2)
以下是sed
:
$ echo '755="Some String In Here"' | sed 's/\([^=]*\)=\(.*\)/\2=\1/'
"Some String In Here"=755
请注意,即使右侧的字符串包含=
字符,此方法仍然有效:
$ echo '1="a==b"' | sed 's/\([^=]*\)=\(.*\)/\2=\1/'
"a==b"=1
答案 2 :(得分:1)
像
这样的东西$ echo 755=\"Some String In Here\" | sed -r 's/(.*)=(.*)/\2=\1/'
"Some String In Here"=755
答案 3 :(得分:1)
带有正则表达式的纯Bash:
string='755="Some String In Here"'
[[ $string =~ ^([^=]+)=(.*) ]] && printf '%s=%s\n' "${BASH_REMATCH[2]}" "${BASH_REMATCH[1]}"
或使用参数扩展(这也适用于POSIX shell):
printf '%s=%s\n' "${string#*=}" "${string%%=*}"
如果有多个等号,那么工作正常:
$ var='a="b=c"'
$ [[ $var =~ ^([^=]+)=(.*) ]] && printf '%s=%s\n' "${BASH_REMATCH[2]}" "${BASH_REMATCH[1]}"
"b=c"=a
$ printf '%s=%s\n' "${var#*=}" "${var%%=*}"
"b=c"=a