我有一堆最初从模板创建的文件。这意味着我知道提到的标签存在于所有这些文件中!(我希望艾德也是好的!)
我在这里分享这个案例时已经简化了原始文件。只有四个文件,每个文件有两个参数/标签。
$ cat file1.tt file2.tt file3.tt file4.tt
#region owner
// kalle
#endregion
#region status
// open
#endregion
#
#region owner
// berra
#endregion
#region status
// Open
#endregion
#
#region owner
// sune
#endregion
#region status
// test
#endregion
#
#region owner
// sixten
#endregion
#region status
// analyze
#endregion`
a)我想做的第一件事是找到所有具有标签“状态”值而非“打开”或“打开”的文件。我希望打印输出显示文件名和实际状态。
这是我已经拥有的东西。(下文进一步介绍)
B)但我还想看到在上面的“a”中找到的文件的标签“owner”。该结果可以打印在“a”中的“status”信息之后的行上。像这样的东西会很棒,
file3.tt-// test // sune
file4.tt-// analyze // sixten`
我有一个命令来打印所有文件的“owner”标记值。但不是我根据上面要求的解决方案。
打印输出格式并不重要,只要每个文件的信息被很好地分开即可:这两个标记也可以打印在文件名后面的单独行上。然后在下一个文件名前显示一个空行。等等...
到目前为止,我可以很容易地得到我想在“一”与此:
grep -rA1 --include='*.tt' '#region status' | grep -v '#region status' | grep 'tt' | grep -v --ignore-case open
file3.tt-// test
file4.tt-// analyze
对于“B”,我有这个命令。但这将为所有文件打印“所有者”。
grep -rA1 --include='*.tt' '#region owner' . | grep -v '#region owner'
./file1.tt-// kalle
./file2.tt-// berra
./file3.tt-// sune
./file4.tt-// sixten
但我想要的是a和b的组合只是为了打印在“a”中找到的文件的“所有者”。因此,只有当“status”标签与“open”/“Open”不同时,才应打印文件名以及“status”和“owner”。
一行字是我期待看到的。
谢谢
1条答案
按热度按时间dffbzjpn1#
grep -v
打印不匹配模式的 * 行 *,但不排除整个文件。使用带有
if
的循环来测试文件是否包含open
。然后,您可以使用sed
打印#region owner
之后的行。