在 bash 中寻找解决方案(将是更大脚本的一部分)。
给定一个包含以下形式信息的变量
差异 -r efb93662e8a7 -r 53784895c0f7 diff.txt --- diff.txt 2009 年 1 月 23 日星期五 14:48:30 +0000 +++ b/diff.txt 2009 年 1 月 23 日星期五 14:49:58 +0000 @@ -1,9 +0,0 @@ -diff -r 9741ec300459 myfile.c ---- myfile.c 2008 年 8 月 21 日星期四 18:22:17 +0000 -+++ b/myfile.c 2008 年 8 月 21 日星期四 18:22:17 +0000 -@@ -1,4 +1,4 @@ - int myfunc() - { --返回1; -+ 返回 10; - }
我希望将两个文件名(此处为 diff.txt 和 myfile.c,但将来的情况将不限于此数字)提取为“edited: filename1 filename2 ... filenameN”形式的字符串。
为了澄清这一点,我希望将多个匹配的文件名提取到一个字符串中。
编辑:需要能够识别已编辑的文件名(可能包括空格),即出现在“---”之后和“星期五/星期四...”之前的文件名。
感谢您的帮助(以及迄今为止许多人的回复)。
仅使用 bash 内置程序而不使用外部程序的解决方案是:
res="edited: "; var="${var#* --- } --- "
while test -n "$var";do res="$res ${var%% *}"; var="${var#* --- }";done
echo "$res"
Run Code Online (Sandbox Code Playgroud)
它迭代所有出现的“---”。诀窍是通过首先从开头(直到第一个 ---)修剪垃圾并在末尾附加“ --- ”来准备字符串,以便能够在之后的 while 循环中拥有更简单的逻辑。
这是通过使用 bash 最有用的功能,即 # 和 % 来修剪字符串
归档时间: |
|
查看次数: |
4084 次 |
最近记录: |