提示用户输入行号以便使用sed进行复制

时间:2017-03-12 01:38:09

标签: bash sed scripting

我试图找到一种方法让用户输入他希望用sed复制到新文件的行号,但我似乎无法管理它。 我可以为单行或范围执行此操作,但我希望用户选择多个特定行。 这可能吗?

到目前为止,这对我来说只有一条线路。

read lineNr  
sed -n ""$lineNr""p file1 > file2

我如何为多行做到这一点?

1 个答案:

答案 0 :(得分:3)

您可以将多个行号读入数组,然后使用参数扩展将该数组转换为sed命令:

read -a arr -p "Enter line numbers: "
sed -n "${arr[*]/%/p;}" infile

read命令将空格分隔的数字读入数组arr。然后第二个命令使用参数扩展:

  • "${arr[*]}"本身会返回一个包含所有数组元素的字符串,例如1 3 5
  • /%/p;部分是替换:它表示“在每个数组元素(/%)的末尾替换p;”,这实际上附加了{{1}每个数组元素:

    p;

因此,当输入一串行号时,sed命令只打印相应的行。

顺便说一句,除了$ arr=(1 3 5 7) $ echo "${arr[*]/%/p;}" 1p; 3p; 5p; 7p; 变量名与lineNr之间的分隔之外,命令中的引号不会执行任何操作。你的意思是

p

可能?