regex - 如何找到第一次出现的重复并将其转换为文本

标签 regex bash shell sed

我的脚本文件包含以下内容:

grep -i apple basket.*
grep -i apple basket.*
grep -i lion zoo.*
grep -i lion zoo.*

我想要以下内容:

echo "Finding apple in basket.*"
grep -i apple basket.*
echo "Finding lion in zoo.*"
grep -i lion zoo.*

本质上,我想在我的脚本文件中找到重复项,捕获第一次出现的重复项,然后仅将第一次出现的项转换为文本。

这可能吗?如果可以,我该如何实现这一目标?

最佳答案

使用 GNU sed:

sed -E 's/grep -i //; s/(.*) (.*)/echo "Finding \1 in \2"/; N' file

sed -E 's/grep -i (.*) (.*)/echo "Finding \1 in \2"/; N' file

N: append the next line of input into the pattern space

输出:

echo "Finding apple in basket.*"
grep -i apple basket.*
echo "Finding lion in zoo.*"
grep -i lion zoo.*

关于regex - 如何找到第一次出现的重复并将其转换为文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52658177/

相关文章:

C++ 反向 regex_search

sql-server - 将逗号分隔值拆分为行

php - 如何使用 preg_match 返回只需要的匹配

bash - 从 linux 中的循环中的字符串中提取特定字符

java - 无法获取配置文件 : export: Command not found

macos - 从命令行打开一个 html 页面到 Mac OS 上的 anchor

regex - 如果行以数字开头,则替换空格或 -'s with _' s

bash - 无法使用 curl 安装 NPM

ruby - Chef - 在 SQLEOH 中使用 for 循环

linux - BASH脚本中的for循环问题