使用 sed 命令交换字符串中的第 2 个和第 6 个字符

Swap 2nd and 6th char in a string using sed command

我写了一个 sed 命令来交换下面数字中的第二个和第六个字符。

我收到以下错误:

sed: file minor1.sed line 4: invalid reference  on `s' command's RHS

我的 sed 命令(script.sed):

s/\(.\){10}//g

我正在使用 sed -r -f script.sed Input.txt 到 运行 命令。

Input.txt -

8668797647
8884747424
3716706006
8662665588

谁能帮我弄清楚为什么会出现此错误?

试试这个:

sed -E 's/^\(.\)\(.\)\(...\)\(.\)//'

这会捕获编号如下的组中的数字:

Input:  abcdefghij
Group:  123334  (the capture group of the digit above)
Result: afcdebghij

只有前6位是matched/replaced。

不确定为什么您只在 </code> 处收到该错误,但如果您将其另存为 .sed 并 运行 它,这里有一个表达式确实可以满足您的要求正如你所建议的:</p> <pre><code>s/(.)(.)(.{3})(.)//

最后没有 g,因为无论如何您只想替换每行的第一个匹配项。

它匹配:一个字符,一个字符,三个字符和一个字符,然后将它们作为第一个匹配,第四个匹配(第六个字符),第三个匹配(中间的字符)和第二个字符写回。有效地交换第 2 和第 6 个。