使用 sed 和 shell 变量将行从一个文件复制到另一个文件

使用 sed 和 shell 变量将行从一个文件复制到另一个文件

我一直在试图弄清楚如何使用 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

我使用46作为虚拟数字的地方。

让我们再次使用这些虚拟数字和命令来检查您的表达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

第一个变量周围的大括号不是必需的,但最好使其保持一致。

相关内容