gpt4 book ai didi

bash - 在 bash 中提取所有匹配的子字符串

转载 作者:行者123 更新时间:2023-11-29 09:12:32 25 4
gpt4 key购买 nike

在 bash 中寻找解决方案(将成为更大脚本的一部分)。

给定一个包含表单信息的变量

diff -r efb93662e8a7 -r 53784895c0f7 diff.txt--- diff.txt Fri Jan 23 14:48:30 2009 +0000+++ b/diff.txt Fri Jan 23 14:49:58 2009 +0000@@ -1,9 +0,0 @@ -diff -r 9741ec300459 myfile.c ---- myfile.c Thu Aug 21 18:22:17 2008 +0000 -+++ b/myfile.c Thu Aug 21 18:22:17 2008 +0000 -@@ -1,4 +1,4 @@ -  int myfunc() -  { --     return 1; -+     return 10; -  }

我希望将两个文件名(此处为 diff.txt 和 myfile.c,但 future 的情况将不限于此数量)提取为“edited: filename1 filename2 ... filenameN”形式的字符串。

澄清一下,我希望将多个匹配的文件名提取到一个字符串中。

  • 命令“$(expr "$editing": '.*---[[:space:]]\([[:graph:]]*\)[[:space:]]')”返回最后一个文件名正确,但以前的实例不正确。

编辑:要求能够识别编辑过的文件名(可能包括空格),即出现在“---”之后和“周五/周四...”之前的文件名。

感谢您的帮助(以及到目前为止已经回复的许多人)。

最佳答案

仅使用 bash 内置程序,不使用外部程序的解决方案是:

res="edited: "; var="${var#* --- } --- "
while test -n "$var";do res="$res ${var%% *}"; var="${var#* --- }";done
echo "$res"

它迭代所有出现的“---”。诀窍是通过从一开始就修剪垃圾来准备字符串(直到第一个---)并在末尾附加一个“---”,以便之后的 while 循环中具有更简单的逻辑。

这是通过使用 bash 最有用的功能,# 和 % 来修剪字符串

关于bash - 在 bash 中提取所有匹配的子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/473979/

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