我一直在试图弄清楚如何使用 sed 和一些 shell 变量将行从一个文件复制到另一个文件的末尾。
sed -n "$var1,$var2'p'" file1.txt > file2.txt
我已经尝试过这种方式以及许多相似的变化,但没有雪茄。有人可以告诉我正确的语法吗?谢谢。
编辑
所以我尝试了下面的建议,但现在我收到此错误
sed: -e expression #1, char 2: invalid usage of line address 0
sed: -e expression #1, char 2: unknown command: `*'"
编辑
好的,这些建议有所帮助,我发现了另一个问题,现在我的脚本运行完美。太感谢了!
答案1
弗莱迪的回答有效,但是缺乏解释。您可能想要的格式sed
类似于
sed -n 4,6p file1.txt
我使用4
和6
作为虚拟数字的地方。
让我们再次使用这些虚拟数字和命令来检查您的表达echo
。
$ var1=4
$ var2=6
$ echo "$var1,$var2'p'"
4,6'p'
因为您将'
s 括在"
s 中,所以它们会按字面解释,并且您'
对于 sed 命令来说就是字面 s。因此,当您尝试运行命令时:
$ sed -n "$var1,$var2'p'" file1.txt
sed: -e expression #1, char 4: unknown command: `''
解决方案
'
您可以从表达式中删除s,但这会将变量名称更改$var2p
为。因此,正如 Freddy 所建议的,您可以使用{…}
显式括起变量名称。 IE
sed -n "${var1},${var2}p" file1.txt
您可以通过在命令前添加 echo 来测试这是否有效。另一种格式是
sed -n "$var1,$var2"p file1.txt
但在我看来,它的可读性较差。
最后,作为钢铁驱动者指出,如果您打算追加到文件中,请使用>> file2.txt
而不是> file2.txt
.
答案2
在变量名称周围使用花括号:
sed -n "${var1},${var2}p" file1.txt > file2.txt
第一个变量周围的大括号不是必需的,但最好使其保持一致。