【问题标题】:Prompting user to input line numbers for copying with sed提示用户输入行号以使用 sed 进行复制
【发布时间】:2017-03-12 10:51:41
【问题描述】:

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

到目前为止,这对我来说只适用于一行。

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

如何处理多行?

【问题讨论】:

    标签: bash sed scripting


    【解决方案1】:

    您可以将多个行号读入一个数组,然后使用参数扩展将该数组转换为 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"
    

    也许?

    【讨论】:

      猜你喜欢
      • 2017-04-20
      • 2017-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-23
      • 2011-07-02
      • 1970-01-01
      • 2020-09-25
      相关资源
      最近更新 更多