每个文件的第一行都以a 1 b
unknown_string 开头,其余行都以c
unknown_string 开头
我想检查字符串是否a 1 b
出现在下一行中(比较第一行的 unknown_string 和下一行的 unknown_string)。如果匹配 - 则打印,YES
如果不匹配NO
,则保留路径和文件名?
输入
loken@lokenU:/home$ cat /home/loken/Documents/bash-test/test1.cfg
a 1 b Test_1
c Test_1
loken@lokenU:/home$ cat /home/loken/Documents/bash-test/test2.cfg
a 1 b Test_2
c Test_2
loken@lokenU:/home$ cat /home/loken/Documents/bash-test/test3.cfg
a 1 b Test_3
c Test_2
c Test_4
loken@lokenU:/home$ cat /home/loken/Documents/bash-test/test4.cfg
a 1 b Test_4
c Test_2
c Test_3
输出应该类似:
/home/loken/Documents/bash-test/test1.cfg: Yes
/home/loken/Documents/bash-test/test2.cfg: Yes
/home/loken/Documents/bash-test/test3.cfg: NO
/home/loken/Documents/bash-test/test4.cfg: NO
答案1
Perl 来救援!
perl -lne 'if ($. == 1) { ($s) = /a 1 b (.*)/; $f = 0; }
else { -1 != index $_, $s and $f = 1; }
if (eof) { print $ARGV, "\t", $f ? "YES" : "NO"; $. = 0}
' *.cfg
-n
逐行读取输入-l
在打印中添加换行符$.
包含输入行号。在第一行,字符串通过与捕获组匹配存储在 $s 中,并且 $f(“found”)设置为零(false)。- 否则(不是第一行),如果找到字符串,则 $f 设置为 true (1)
- 在文件末尾,行数被重置,并且文件名与结果一起打印。