我正在尝试使用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
('`
是使用\
来逃避大括号的唯一解决方案吗?
答案 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'