【问题标题】:How to use positional parameter in script when it is interval间隔时如何在脚本中使用位置参数
【发布时间】:2016-03-24 19:50:19
【问题描述】:

我有一个位置参数 A-B,它是间隔,我需要使用这个间隔来打印文件中的行。在示例 $./File.sh 5-10 中,我需要我的脚本来打印 5 到 10 之间的文件行。

【问题讨论】:

  • 你有没有为此尝试过?你知道如何(忽略你的论点)打印文件中的行间隔吗?

标签: bash shell unix command-line sh


【解决方案1】:

假设您有一个包含 20 行的文件,并且您想要打印第 5-15 行...下面的命令是您如何完成此操作的。

sed -n '5,15p' {name_of_file}

将 {name_of_file} 替换为实际文件名。

现在我不打算写出你的整个脚本,但你可以拿 1 美元 (5-15) 并解析该数据……例如。

fieldOne=$(echo $1 | awk -F"-" '{print $1}') #This will equal 5
fieldTwo=$(echo $1 | awk -F"-" '{print $2}') #This will equal 15

【讨论】:

  • 只有一个参数$1 (5-15)
  • 那里。更新了我的答案,向您展示如何解析 $1
  • 或者假设用户正确指定了范围:awk "${1/-/,}p" …(用逗号替换破折号;添加p)。不过,总的来说,最好假设您已经忘记了如何编写范围并且应该验证它。
【解决方案2】:

符合 POSIX 的解决方案:使用内置的 read 命令分割范围。

IFS=- read a b <<EOF
$1
EOF

bash 中,您有一些更简单的选择。

  1. IFS=- read a b &lt;&lt;&lt; "$1"
  2. [[ $1 =~ ^(.*)-(.*)$ ]] &amp;&amp; a=${BASH_REMATCH[1]} b=${BASH_REMATCH[2]}

这些都不涉及派生新进程来运行外部程序。

【讨论】:

    猜你喜欢
    • 2020-07-18
    • 1970-01-01
    • 2011-02-17
    • 2020-05-20
    • 2018-09-07
    • 1970-01-01
    • 2011-11-09
    相关资源
    最近更新 更多