linux - 在文件中多次替换单词之间的字符串
问题描述
我正在尝试使用以下命令替换文件中两个字符串之间的字符串。文件中可能有任意数量的此类模式。这只是一个例子。
sed 's/word1.*word2/word1/' 1.txt
在我正在测试的示例源文件中,有两个例子是“word1”后跟“word2”。1.txt文件的内容
word1---sjdkkdkjdk---word2 I want this text----word1---jhfnkfnsjkdnf----word2 I need this also
结果如下。
word1 I need this also
预期输出:
word1 I want this text----word1 I need this also
有人可以帮我吗?
我查看了其他堆栈溢出问卷,但他们讨论了仅替换该模式的一个实例。
解决方案
正则表达式是贪婪的——它们匹配尽可能长的字符串,所以从第一个 'word1' 到最后一个 'word2' 的所有内容。不确定是否有任何版本的 sed 支持非贪婪的正则表达式......不过,您可以只使用 perl,它可以:
perl -pe 's/word1.*?word2/word1/g' 1.txt
应该做的伎俩。这?
将先验的含义*
从“只要模式的其余部分匹配就尽可能多地匹配”变为“只要模式的其余部分匹配就尽可能少地匹配”。
推荐阅读
- vb.net - 使用 VB.Net 2015 发送十六进制字节的简单 TCP 客户端程序
- reactjs - Heroku 找不到私有 NPM 包
- php - API 调用中未收到 POST 数据
- javascript - 如何在 php 中获取表单字段的值(字段是从 javascript 创建的)?
- html - Bannermover 的第一个 img 不直接跟在 bannermove 的最后一个 img 之后
- android - 当外部存储空间不足时,DownloadManager 不广播意图
- html - 移动网站背景图片未调整大小
- c - 有什么方法可以让我的函数更快地测试字符串的相等性?
- python - 如何获取 Pandas 索引位置和名称
- angular - Ionic 4 应用程序无法在 android Lollipop 中运行