gpt4 book ai didi

regex - 有没有办法使用 sed 只删除完全匹配的字符串?

转载 作者:行者123 更新时间:2023-12-04 01:15:55 28 4
gpt4 key购买 nike

我最近开始学习 bash,但在做作业时遇到了问题,所以我有一个 txt 文件,其中包含类似的内容

foo:abc:200:1:1:1
foobar:asd:100:3:2:1
bar:test:100:2:2:2

其中第一列是书名,后面是作者姓名,然后是价格、可用数量和已售出数量,全部用分隔符“:”分隔

此处的目标是根据用户输入的名称和作者删除一本书。

我四处搜索,发现 sed 可能可以帮助我解决这个问题,我尝试通过单独删除基于标题的 base 来测试 sed

sed /"foo"/d Book.txt

我期望输出是

foobar:asd:100:3:2:1
bar:test:100:2:2:2

但是输出是

bar:test:100:2:2:2   

这告诉我 txt 文件中包含“foo”的任何行都将被删除

所以我想问一下

  1. 有什么方法可以使用 sed 以便它只删除完全匹配而不是包含 foo 的行?
  2. 有没有办法在 sed 中使用定界符,这样我就可以同时使用标题和作者?
  3. 我应该使用 sed 以外的东西吗?

最佳答案

使用 sed 最好使用:

sed -E '/(^|:)foo(:|$)/d' file

foobar:asd:100:3:2:1
bar:test:100:2:2:2

这确保 foo 前面有 start 或 :,后面有 end 或 :

然而,这项工作更适合 awk,因为数据由冒号分隔:

awk -F: '$1 != "foo"' file

关于regex - 有没有办法使用 sed 只删除完全匹配的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54143382/

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