使用Unix在特定位置匹配字符串

时间:2018-06-20 18:13:31

标签: shell unix

我正在尝试使用substr在循环中运行它来匹配特定位置的字符串

例如,我的cardfile.txt包含 h2 { color: #fff; font-family: Minion Pro, Times New Roman, serif; font-size: 42px; font-weight: 700; font-style: italic; text-align: center; padding-top: 25px; margin-bottom: 15px; margin-top: 0; /* This one */ }

我的输入文件是 01 02

我想在输出行的前2个字符中包含01或02,如下所示 02AAA45678 04BBB04673 01CCC63848 05DDD07494

02AAA45678 01CCC63848

如果我试图通过直接在substr中给出字符串来运行,例如“ 02”,则它可以正常工作,但是如果给出$ i,则它与字符串不匹配

预先感谢

2 个答案:

答案 0 :(得分:0)

问题在于您的变量$i包含在“单引号”中,这阻止了bash的变量扩展。

这个问题也问同样的问题,并且在awk脚本中使用bash变量(例如$i)提供了一些好的解决方案。

How do I use shell variables in an awk script?

答案 1 :(得分:0)

我假设您的cardfile.txt应该像这样分解:

02AAA45678
04BBB04673
01CCC63848
05DDD07494

您是否需要在循环中使用awk?如何使用grep:

grep -E '^(01|02)' cardfile.txt

如果必须使用awk,请尝试以下操作:

for i in `cat cardfile.txt `; do awk 'substr($0,1,2) == "'"$i"'" {print} ' input.txt >> output.txt; done

由于单引号和您的shell扩展(或在这种情况下不扩展)$ i的方式,您遇到了麻烦。