【问题标题】:How can I get my bash script to remove the first n and last n lines from a variable?`如何让我的 bash 脚本从变量中删除前 n 行和后 n 行?
【发布时间】:2016-08-01 00:10:17
【问题描述】:

我正在制作一个脚本来执行“dig ns google.com”并切断除答案部分之外的所有结果。

到目前为止,我有:

#!/bin/bash

echo -n "Please enter the domain: "
read d
echo "You entered: $d"
dr="$(dig ns $d)"
sr="$(sed -i 1,10d $dr)"
tr="$(head -n -6 $sr)"
echo "$tr"

理论上,这应该可行。 sed 和 head 命令在脚本之外单独工作,分别切断前 10 个和后 6 个,但是当我将它们放入我的脚本时,sed 返回一个错误,看起来它正在尝试读取变量作为命令而不是输入。错误是:

sed: invalid option -- '>'

到目前为止,我还没有找到一种方法来读取变量作为输入。我试过用 "" 和 '' 包围它,但这不起作用。显然,我对整个 bash 脚本编写很陌生,任何帮助都会很棒!

【问题讨论】:

    标签: linux bash sed terminal scripting


    【解决方案1】:

    您将行分配给变量,而不是例如管道它们

    seq 25 | tail -n +11 | head -n -6
    

    将删除前 10 行和后 6 行并打印 11 到 19。 在你的情况下,用你的脚本替换 seq 25

    dig ns "$d" | tail -n +11 | head -n -6
    

    也不需要回声。

    【讨论】:

    • 唯一的问题是我并不总是知道结果会持续多久,所以我希望能够从底部开始做一个特定的数字。不过谢谢,我肯定会考虑这个选项。
    • 6 从底部开始计数。这些是 -n 版本的 head/tail。
    • 哦,我没有意识到,哎呀。我试试看,谢谢!
    猜你喜欢
    • 1970-01-01
    • 2016-03-20
    • 2012-08-26
    • 2015-04-21
    • 1970-01-01
    • 2020-01-27
    • 1970-01-01
    • 2016-11-30
    • 2021-09-14
    相关资源
    最近更新 更多