sed替换替换花括号${i}-如何停止?

sed替换替换花括号${i}-如何停止?,sed,Sed,我尝试使用sed将13替换为21: echo "for i in {1..5}; do commands for FILE13 > output_${i}; done" | sed 's/13/21/g' 我的输出如下所示: for i in {1..5}; do commands for FILE21 > output_2; done 13被21取代,但另外${i}被2取代 为什么会发生这种情况?如何阻止sed替换mu大括号内容 编辑 如果我的命令如下所示: echo 'for

我尝试使用sed将13替换为21:

echo "for i in {1..5}; do commands for FILE13 > output_${i}; done" | sed 's/13/21/g'
我的输出如下所示:

for i in {1..5}; do commands for FILE21 > output_2; done
13被21取代,但另外${i}被2取代

为什么会发生这种情况?如何阻止sed替换mu大括号内容

编辑

如果我的命令如下所示:

echo 'for i in {1..5}; awk'{( do commands)}' FILE13  > output_${i}; done' | sed 's/13/21/g'
我无法将双引号替换为单引号,因为我在意外标记附近遇到bash:syntax错误'`


是否使用\来转义大括号的唯一解决方案?

echo的参数是文本字符串吗?然后:

echo "for i in {1..5}; do commands for FILE13 > output_\${i}; done" | sed 's/13/21/g'

echo的参数是文本字符串吗?然后:

echo "for i in {1..5}; do commands for FILE13 > output_\${i}; done" | sed 's/13/21/g'

这不是取代花括号,而是贝壳。将回显字符串的双引号更改为单引号

比较:

$ echo "for i in {1..5}; do commands for FILE13 > output_${i}; done"
for i in {1..5}; do commands for FILE13 > output_; done

$ echo 'for i in {1..5}; do commands for FILE13 > output_${i}; done'
for i in {1..5}; do commands for FILE13 > output_${i}; done
如果要回显的字符串本身包含单引号,请使用双引号并转义$,或直接处理引号:

$ echo "for i in {1..5}; awk'{( do commands)}' FILE13  > output_\${i}; done"
for i in {1..5}; awk'{( do commands)}' FILE13  > output_${i}; done

$ echo 'for i in {1..5}; awk'"'"'{( do commands)}'"'"' FILE13  > output_${i}; done'
for i in {1..5}; awk'{( do commands)}' FILE13  > output_${i}; done

这不是取代花括号,而是贝壳。将回显字符串的双引号更改为单引号

比较:

$ echo "for i in {1..5}; do commands for FILE13 > output_${i}; done"
for i in {1..5}; do commands for FILE13 > output_; done

$ echo 'for i in {1..5}; do commands for FILE13 > output_${i}; done'
for i in {1..5}; do commands for FILE13 > output_${i}; done
如果要回显的字符串本身包含单引号,请使用双引号并转义$,或直接处理引号:

$ echo "for i in {1..5}; awk'{( do commands)}' FILE13  > output_\${i}; done"
for i in {1..5}; awk'{( do commands)}' FILE13  > output_${i}; done

$ echo 'for i in {1..5}; awk'"'"'{( do commands)}'"'"' FILE13  > output_${i}; done'
for i in {1..5}; awk'{( do commands)}' FILE13  > output_${i}; done

不能在单引号字符串中嵌入单引号。尝试:

echo 'for i in {1..5}; awk'"'"'{( do commands)}'"'"' FILE13  > output_${i}; done'

不能在单引号字符串中嵌入单引号。尝试:

echo 'for i in {1..5}; awk'"'"'{( do commands)}'"'"' FILE13  > output_${i}; done'

这听起来像是个XY问题。为什么要编辑shell命令?您是否只需要一个在FILE13和FILE21上迭代的外部for循环?如果这是用于交互式shell,请阅读shell的历史机制。这听起来像是XY问题。为什么要编辑shell命令?您是否只需要一个在FILE13和FILE21上迭代的外部for循环?如果这是用于交互式shell,请阅读shell的历史机制。