【问题标题】:awk / sed script to remove text用于删除文本的 awk / sed 脚本
【发布时间】:2011-02-22 05:23:34
【问题描述】:

我目前需要一种以编程方式从我正在处理的 Makefile 中删除一些文本的方法。现在的问题是(无论出于何种原因)makefile 是使用-l<full_path_to_library>/<library_name> 的链接命令生成的,而它们应该使用-l<library_name> 生成。所以我需要一个脚本来查找所有出现的-l/,然后删除直到并包括下一个/

我正在处理的示例

-l/home/user/path/to/boost/lib/boost_filesystem

我需要它

-lboost_filesystem

可以想象,这是一种权宜之计,直到我解决了真正的问题(在一代方面),但与此同时,如果这能奏效,我对我的 awk 不太擅长和 sed。

感谢您的帮助。

【问题讨论】:

  • 您没有解决为什么构建系统首先生成搞砸的makefile的问题有什么特别的原因吗?
  • 如问题中所述,这是一个权宜之计的解决方案。我目前正在运行构建系统的非官方补丁,该补丁具有我需要的某些功能,不幸的是它正在生成具有所述问题的 makefile。我绝对打算(并且很快)通过正确集成新功能来解决这个问题,但同时我希望能够编译我的应用程序,经过几天的设置,现在我可以;)

标签: text scripting sed makefile awk


【解决方案1】:
sed -i 's|-l[^ ]*/\([^/ ]*\)|-l\1|g' Makefile

【讨论】:

  • 我会在 -l 前面添加空格以避免匹配 -lrelative-librarypath/lib
【解决方案2】:

给你

echo "-l/home/user/path/to/boost/lib/boost_filesystem" | awk -F"/" '{ print $1  $NF  } '

【讨论】:

  • 处理你的单个测试用例,但不是包含其他文本的行上的多个实例的一般问题。 awk 是最快乐的在线操作,您可以在 scriptlette 中添加一个模式,但在这里 sed 是更好的选择。
猜你喜欢
  • 2018-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-11
  • 1970-01-01
  • 1970-01-01
  • 2011-07-17
  • 2013-08-17
相关资源
最近更新 更多