我试图找到一种方法让用户输入他希望用sed复制到新文件的行号,但我似乎无法管理它。 我可以为单行或范围执行此操作,但我希望用户选择多个特定行。 这可能吗?
到目前为止,这对我来说只有一条线路。
read lineNr
sed -n ""$lineNr""p file1 > file2
我如何为多行做到这一点?
答案 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
可能?