我在一个文件中有以下记录(以及许多其他此类记录)
9460 xyz abc (lmn):1027739543798. Taxpayer's identification number (INN): 123. For all IIB. 2016/02/03
我需要搜索关键字IIB。如果匹配,那么我需要获取整个记录并写入另一个文件。
下面是已经存在的代码。该代码不起作用。此代码的问题是,当它获取完全匹配的记录时,它会忽略“:”后面的文本并写入另一个文件。
cat keyword.cfg | while read KwdName
do
echo "KEYWORD:"${KwdName} //This prints IIB
grep "^${KwdName}\|${KwdName}\|~${KwdName}~\|:${KwdName}$\|:${KwdName}~" ${mainFileWithListOfRecords} | awk -F ":" '{print $1}' >> ${destinationFile}
done
因此,不要将以下记录写入目标文件
9460 xyz abc (lmn):1027739543798. Taxpayer's identification number (INN): 123. For all IIB. 2016/02/03
这只是写作,
9460 xyz abc (lmn)
cat -vte mainFileWithListOfRecords
给出以下输出
9460^IMEZHPROMBANK^I^ICJSC ;IIB;~ Moscow, (lmn): 1027739543798. Taxpayer's identification number (INN): 123. For all IIB. 2016/02/031#msid=s1448434872350^IC1^I2000/12/28^I2015/11/26^I^I$
答案1
如果您需要做的只是在每一行中查找字符串IIB
并将包含该单词的行复制到新文件中,则可以执行以下操作:
grep -w IIB inputfile >outputfile
将会-w
强制grep
寻找完整的单词IIB
(而不是IIIB
or IIB2
)。