【问题标题】:Trimming a textfile修剪文本文件
【发布时间】:2020-03-15 05:54:41
【问题描述】:

我想修剪一个文本文件并删除从第 n 行到文件末尾的所有行。我尝试为此使用 sed。 n=26 的 sed 命令应如下所示:

sed -i '26,$d' /path/to/textfile

所以在我的文本文件中我事先不知道 n,但我知道该行中有一个唯一的文本。所以我就这样尝试了:

myvar=`grep -n 'unique text' /path/to/textfile | awk -F":" '{print $1 }'`
sed -i "${myvar}"',$d' /path/to/textfile

这有效并删除了所有想要的行,但它会引发错误消息:

sed: -e expression # 1, character 1: unknown command: »,«

所以我尝试将命令更改为:

myvar=`grep -n 'unique text' /path/to/textfile | awk -F":" '{print $1 }'`
sed -i "${myvar},$d" /path/to/textfile

这样我得到了同样的错误信息,但它不会删除这些行。 我尝试了 ' 和 " 的一些变体以及如何将变量放在那里,但它从来没有按预期工作。有人知道我做错了什么吗?

只要我能在 bash 脚本中完成,我会很感激其他修剪文本文件的方法。

【问题讨论】:

    标签: bash variables sed


    【解决方案1】:

    您可以将固定的行号替换为与开始行匹配的正则表达式。

    sed -i '/unique text/,$d' /path/to/textfile
    

    您也可以使用ed 来编辑文件,而不是依赖非标准的sed 扩展名。

    printf '/unique text/,$d\nwq\n' | ed /path/to/textfile
    

    【讨论】:

    • 两个命令都有错别字,是 $d 而不是 d$... 但它们工作正常。谢谢!
    • 超校正;当我知道它不是时,我一直想把它作为参数扩展来阅读,所以我显然输入了它,所以它不可能是一个:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-22
    • 2018-09-24
    • 1970-01-01
    • 2012-04-07
    • 1970-01-01
    相关资源
    最近更新 更多