我对替换有问题。我有一个文件,其中包含一行随机字符,其中括号"{}“包含1个字符。我想在前一个字符或下一个字符上移动这些括号。(如果字符行是静止的、不变的,我知道该怎么做。)但是当我不认识这些字符,也不知道这些括号在哪里时,我想知道该怎么做。
例如:“ABC123{X}CBA321”==>“ABC12{3}XCBA321”或“ABC123X{C}BA321”
我想使用awk或sed,一些正则表达式,也许...
发布于 2009-03-25 18:18:35
向后移动一个字符:
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}。
发布于 2009-03-25 18:18:39
这会将括号移动到前一个字符:
sed -e 's/\(.\){\(.\)}/{\1}\2/g' < in_file > out_file这会将括号移动到下一个字符:
sed -e 's/{\(.\)}\(.\)/\1{\2}/g' < in_file > out_file 发布于 2009-03-25 18:21:59
这里有一个小示例。
$ 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}/' filehttps://stackoverflow.com/questions/682820
复制相似问题