我有一个包含这样的字符串行的文件:
uh-g+n uh-g+b
uh-g g
uh-g+r
g+n
uh-g+s g
sh-n+b
sh-n+d
n+d sh-n+d
g-n+d sh-n+d
我有一个我正在搜索的字符串列表,例如
设置 pats = (g+n sh-n+b n+d)
对于每个字符串,我想找到第一个“单词”与字符串匹配的行,并将该行附加到另一个文件中。
如你看到的...
要匹配的字符串在变量中
字符串可能包含也可能不包含特殊的前导字符,例如“-”
行可能包含作为两个单词中的第一个的字符串,或者单独包含
该字符串可能是包含特殊前导字符的较长字符串的子字符串
字符串可能是第二个单词或第二个单词的一部分(不应匹配)
找到与 grep 相关的正确组合来完成这项工作是一个意想不到的挑战!
这是一个简单尝试但不起作用的示例(假设上面列出的行在文件 in.txt 中。
#!/bin/tcsh
set pats = (g+n sh-n+b n+d)
foreach pat ($pats)
grep -w $pat in.txt >> out.txt
end
在这种情况下,out.txt 看起来像这样:
uh-g+n uh-g+b
g+n
sh-n+b
sh-n+d
n+d sh-n+d
g-n+d sh-n+d
uh-g+n uh-g+b
g+n
sh-n+b
sh-n+d
n+d sh-n+d
g-n+d sh-n+d
但我想要的是这样的:
g+n
sh-n+b
n+d sh-n+d