【发布时间】:2017-03-12 10:51:41
【问题描述】:
我试图找到一种方法让用户输入他希望使用 sed 复制到新文件的行号,但我似乎无法管理它。 我可以为单个行或范围执行此操作,但我希望用户选择多个特定行。 这可能吗?
到目前为止,这对我来说只适用于一行。
read lineNr
sed -n ""$lineNr""p file1 > file2
如何处理多行?
【问题讨论】:
我试图找到一种方法让用户输入他希望使用 sed 复制到新文件的行号,但我似乎无法管理它。 我可以为单个行或范围执行此操作,但我希望用户选择多个特定行。 这可能吗?
到目前为止,这对我来说只适用于一行。
read lineNr
sed -n ""$lineNr""p file1 > file2
如何处理多行?
【问题讨论】:
您可以将多个行号读入一个数组,然后使用参数扩展将该数组转换为 sed 命令:
read -a arr -p "Enter line numbers: "
sed -n "${arr[*]/%/p;}" infile
read 命令将空格分隔的数字读入数组arr。然后第二个命令使用参数扩展:
"${arr[*]}" 单独返回一个包含所有数组元素的字符串,例如 1 3 5。/%/p; 部分是一个替换:它表示“用p; 替换每个数组元素的末尾 (/%),这实际上将p; 附加到每个数组元素:
$ arr=(1 3 5 7)
$ echo "${arr[*]/%/p;}"
1p; 3p; 5p; 7p;
所以当输入一堆行号时,sed 命令只打印相应的行。
顺便说一句,除了将lineNr 变量名与p 分开之外,命令中的引号没有任何作用。你的意思是像
sed -n "${lineNr}p"
也许?
【讨论】: