sed / awk - 从文件中删除除特定匹配模式之外的所有内容

发布于 2024-10-07 05:54:07 字数 309 浏览 2 评论 0原文

我想将这样的 makefile 转换

test.o: var_one.h var_two.h

test2.o: another_header.h var_three.h archive/something_random.h

为: 即

test.o: var_one.h var_two.h

test2.o: var_three.h

,我想删除任何不以搜索字符串“var_”开头的文件名

我似乎找不到 sed 有关模式匹配的大量信息。想要搜索字符串?

I want to convert a makefile like this:

test.o: var_one.h var_two.h

test2.o: another_header.h var_three.h archive/something_random.h

to this:

test.o: var_one.h var_two.h

test2.o: var_three.h

ie, I want to remove any filename that doesn't start with the search string "var_"

I can't seem to find a lot of information for sed about pattern matching when not wanting the search string?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

初相遇 2024-10-14 05:54:07

对于这种类型的工作,你确实需要 awk。使用 sed,尝试删除与字符串不匹配的单词将是一个痛苦的(而且可能是丑陋的)脚本。

awk '{for(i=2;i<=NF;i++)$i !~ /var_.*\.h/ && $i=""}1' Makefile

输入

$ cat Makefile
test.o: var_one.h var_two.h

test2.o: another_header.h var_three.h archive/something_random.h

输出

$ awk '{for(i=2;i<=NF;i++)$i !~ /var_.*\.h/ && $i=""}1' Makefile
test.o: var_one.h var_two.h

test2.o:  var_three.h

You really need awk for this type of job. With sed, attempting to remove words that don't match a string would be a painful (and probably ugly) script to write.

awk '{for(i=2;i<=NF;i++)$i !~ /var_.*\.h/ && $i=""}1' Makefile

Input

$ cat Makefile
test.o: var_one.h var_two.h

test2.o: another_header.h var_three.h archive/something_random.h

Output

$ awk '{for(i=2;i<=NF;i++)$i !~ /var_.*\.h/ && $i=""}1' Makefile
test.o: var_one.h var_two.h

test2.o:  var_three.h
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文