gpt4 book ai didi

shell - 删除文本文件中不包含字符串的所有行

转载 作者:行者123 更新时间:2023-12-02 17:12:26 41 4
gpt4 key购买 nike

所以我有一个txt文件,其中每一行都是一个文件路径,我想:

  1. 阅读此 txt 文件(逐行)。
  2. 删除所有不以 ,-,.txt 结尾的行
  3. 在其余行中,删除最后一个 / 之后到 ,-,.txt 的所有内容。
  4. 将输出写入新的 txt。

如何使用 sed 完成此操作?

输入:

/a/b1/
/a/b1/car
/a/b1/car/bil/
/a/b1/car/bil/,-,.txt
/a/b2/
/a/b2/flower
/a/b2/flower/bil/
/a/b2/flower/bil/,-,.txt
/a/b2/
/a/b2/boat
/a/b2/boat/baat/
/a/b2/boat/baat/abc,-,.txt

第二步:

/a/b1/car/bil/,-,.txt
/a/b2/flower/bil/,-,.txt
/a/b2/boat/baat/abc,-,.txt

第三步/所需的输出:

/a/b1/car/bil/
/a/b2/flower/bil/
/a/b2/boat/baat/

最佳答案

sed -n '/,-,\.txt$/s|/[^/]*$||p' input.txt > output.txt

它的作用:

它从 input.txt 一次读取一行。 ; -n告诉它默认不打印行。对于与模式 ,-,\.txt$ 匹配的每一行,由 / 组成的所有内容字符后跟零个或多个非 /删除直到行尾的字符(即从 last / 到行尾);我用|作为分隔符,这样我就不必转义 / .

这是对您的要求的相当简单的表述。

既然您已经发布了示例输入和输出,我发现您想保留最终的 / (这与您的要求“删除从最后一个 /,-,.txt 的所有内容”不一致)。为此:

sed -n '/,-,\.txt$/s|/[^/]*$|/|p' input.txt > output.txt

根据您的示例输入,这将产生您的预期结果。

如果我是即时执行此操作,我可能会使用更简单的方法,结合 sedgrep :

grep ',-,\.txt$' input.txt | sed 's|/[^/]*$|/|' > output.txt

关于shell - 删除文本文件中不包含字符串的所有行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9290768/

41 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com