我使用运行脚本./myshfile.sh actors
sed -n -e "1,$1p" test.txt > test2.txt && mv test2.txt test.txt
产生以下错误,我找不到原因......
sed: -e expression #1, char 3: unexpected `,'
尝试使用单引号
sed -n -e '1,$1p' test.txt > test2.txt && mv test2.txt test.txt
但这会产生另一个错误
sed: -e expression #1, char 4: unknown command: `1'
答案1
在 中"1,$1p"
,$1
被 shell 扩展,sed
看到1,actorsp
。actorsp
不是有效的 sed 地址,因此会出现错误。不过,错误文本对我来说看起来有点奇怪,它似乎被识别a
为命令,然后又回去想知道逗号。
在 中'1,$1p'
,$1
是不是被壳展开,sed
看到1,$1p
。$
是一个有效的地址,它用于标记最后一行,因此1,$
简单地表示“所有行”。1
但不是有效的命令,因此它是一个错误。
您没有说明您的意图,因此很难提供帮助。
答案2
尝试使用分隔符,
sed -n -e "1,/$1/p" test.txt
您尝试的代码将扩展为,
sed -n -e 1,actorsp test.txt
其中 sed 会将 optionp
作为正则表达式的一部分actorp
。因此,在正则表达式和选项之间使用分隔符以使其起作用。