我试图按如下方式使用sed:
sed -i "7,$n_line s/abcd/efgh/g" file
我收到一条错误说:意外的`,'
答案 0 :(得分:1)
如果将n_line
设置为数值(即您正在使用行号进行范围(例如:7,9),这将按原样运行。
但是,如果将n_line
设置为模式(即您使用行号和模式进行范围调整(例如:7,yyy),则unexpected
,'`将返回为要解决此问题,请将命令更改为:
sed -i "7,/$n_line/ s/abcd/efgh/g" file
示例:强>
AMD$ cat File
aaaaaaaaaaaaaa
aaaaaaaaaaaaaa
aaaaaaaaaaaaaa
aayyyaaaaaaaaa
aaaaaaaaaaaaaa
aaaaaaaaaaaaaa
AMD$ cat Script
#!/bin/bash
echo "Example 1: n is numeric"
n=4
sed "2,$n s/a/b/g" File
echo ""
echo "Example 2: n is pattern (working case)"
n="yyy"
sed "2,/$n/ s/a/b/g" File
echo ""
echo "Example 3: n is pattern (error case)"
n="yyy"
sed "2,$n s/a/b/g" File
AMD$ ./Script
Example 1: n is numeric
aaaaaaaaaaaaaa
bbbbbbbbbbbbbb
bbbbbbbbbbbbbb
bbyyybbbbbbbbb
aaaaaaaaaaaaaa
aaaaaaaaaaaaaa
Example 2: n is pattern (working case)
aaaaaaaaaaaaaa
bbbbbbbbbbbbbb
bbbbbbbbbbbbbb
bbyyybbbbbbbbb
aaaaaaaaaaaaaa
aaaaaaaaaaaaaa
Example 3: n is pattern (error case)
sed: -e expression #1, char 3: unexpected `,'
答案 1 :(得分:1)
sed -i "7,${n_line=0} s/abcd/efgh/g" file
保证一点,以确保n_line至少等于0替换(或任何其他所需值)。这不会检查变量是数字还是空