【问题标题】:keep the first part and delete the rest on a specified line using sed使用 sed 保留第一部分并删除指定行上的其余部分
【发布时间】:2013-09-20 13:42:56
【问题描述】:

我知道文件中的行号,我想保留第一个单词并删除其余单词直到行尾。如何使用 sed 执行此操作? 所以可以说,我想转到文件中的第 10 行,看起来像这样 -

好词“废话”\

而我想要的是
好话

我已经尝试过了 - sed 's/([a-z])./\1/'
但这会在文件中的所有行上执行。我只希望它在一个指定的行上。

【问题讨论】:

  • 当您说“仅在一个指定的行”时,您的意思是仅在第 10 行吗?如果是这样,请尝试10s/([a-z]+).*/\\1/
  • 这对我不起作用
  • 确保正确引用字符串,这样反斜杠在最终结果中只出现一次。

标签: sed


【解决方案1】:

如果“第一个单词”是指“直到第一个空格”,如果“在文件本身中保留此更改”是指您不介意创建一个与以前的文件,如果你有一个支持-i 的sed,你可以这样做:

sed -i '10s/ .*//' input-file

如果你想对单词的定义更加严格,可以使用'10s/\([a-z]*\).*/\1/'

【讨论】:

    【解决方案2】:

    您能否使用 grep 或 awk 仅抓取一行,然后将其通过管道传输到 sed(如果 grep 或 awk 无法为您完成整个工作)以仅处理一行?我认为这里的关键是首先隔离那一行,然后担心从中提取一些东西。

    【讨论】:

    • 我想在文件本身中保留此更改。
    【解决方案3】:

    使用awk

    awk 'NR==10 {print $1}' file
    goodword
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-13
      • 2022-12-10
      • 1970-01-01
      • 2019-03-30
      • 2016-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多