【问题标题】:How to delete perticular lines and its nearby lines in Linux shell? [duplicate]如何在 Linux shell 中删除特定行及其附近的行? [复制]
【发布时间】:2021-08-26 20:51:10
【问题描述】:

我有一个名为file.txt 的文件,它包含几行包含字符串“NaN”的行。如何删除包含“Nan”的行及其前后各一行。我知道sed -i '/pattern/d' file.txt 可以删除匹配的行,但是如何删除匹配行的近行。 最好的问候

【问题讨论】:

  • 请在您的问题中分享输入和预期输出示例,以使您的问题更清楚,谢谢。
  • ed 可能是更适合此类任务的命令,但我不确定如何处理 NaN 是文件中第一行或最后一行的情况。 printf 'g/NaN/-,+d\nwq\n' | ed file.txt。 (当-+ 没有上一行或下一行匹配时,脚本失败。)

标签: linux bash shell


【解决方案1】:

这是一个最不优雅的解决方案,但有效。也许,它会激怒 UNIX 大师来提供一个真正的答案。

grep 'Nan' -n -C 1 target_file.txt | awk -F '[-:]' '{print $2}' | sed '2d' | paste -d, - - | sed 's/$/d/' > del_lines.sed && sed -f del_lines.sed target_file.txt > output_file.txt

fyi,“perticular”这个词拼错了,它的“par-”就像在高尔夫中一样!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-30
    • 2023-03-23
    • 2017-07-08
    • 2017-04-13
    • 2021-12-16
    • 2021-07-30
    • 2020-10-28
    • 2021-03-17
    相关资源
    最近更新 更多