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

时间:2013-02-11 15:26:18

标签: 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 i in {1..5}; awk'{( do commands)}' FILE13  > output_${i}; done' | sed 's/13/21/g'

我无法将双引号替换为单引号,因为我得到bash: syntax error near unexpected token('`

是使用\来逃避大括号的唯一解决方案吗?

3 个答案:

答案 0 :(得分:2)

它不是替换花括号的sed,而是shell。将回显字符串的双引号更改为单引号。

比较

$ 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

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

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

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