我有替代问题。我有一个带有1行随机字符的文件,括号“{}”大约1个字符。我想在前一个字符或下一个字符上移动这些括号。 (如果角色线仍然不变,我知道该怎么做。)但我不知道如何在不知道这些字符的情况下这样做,我不知道这些括号在哪里。
例如:“ABC123 {X} CBA321”==> “ABC12 {3} XCBA321”或“ABC123X {C} BA321”
我想使用awk或sed,一些正则表达式,也许......
答案 0 :(得分:5)
向后移动一个字符:
sed -e 's/\(.\){\(.\)}/{\1}\2/g' file
向前移动一个角色:
sed -e 's/{\(.\)}\(.\)/\1{\2}/g' file
要就地修改文件,请使用-i
标志:
sed -i -e 's/\(.\){\(.\)}/{\1}\2/g' file
sed -i -e 's/{\(.\)}\(.\)/\1{\2}/g' file
第一个示例通过匹配任何字符后跟{}
包围的字符来工作。没有分组,这是:.{.}
我们添加分组,以便我们可以将两个字符放在输出中。而不是用{}
围绕第二个字符并围绕第一个字符。这是{\1}\2
。
第二个示例的工作方式类似,但先匹配{.}.
,然后输出\1{\2}
。
答案 1 :(得分:3)
这会将括号移到上一个字符:
sed -e 's/\(.\){\(.\)}/{\1}\2/g' < in_file > out_file
这会将括号移到下一个字符:
sed -e 's/{\(.\)}\(.\)/\1{\2}/g' < in_file > out_file
答案 2 :(得分:1)
这是一个小例子。
$ echo "ABC123{X}CBA321" | sed -e 's/\(.\){\(.\)}\(.\)/{\1}\2\3/'
ABC12{3}XCBA321
$ echo "ABC123{X}CBA321" | sed -e 's/\(.\){\(.\)}\(.\)/\1\2{\3}/'
ABC123X{C}BA321
以下是使用sed编辑文件的方法。
$ sed -i -e 's/\(.\){\(.\)}\(.\)/{\1}\2\3/' file
$ sed -i -e 's/\(.\){\(.\)}\(.\)/\1\2{\3}/' file
答案 3 :(得分:0)
我在perl中尝试过。这会将括号移动到前一个字符
my $a="ABC123{X}CBA321";
if ($a =~ /(.)\{(.)\}/)
{
print "$`"."{$1}";
print "$2";
print "$'";
}
注意:$`是匹配前的字符串&amp; $'是匹配后的字符串