Grep用户输入以查找号码

时间:2015-11-11 07:03:17

标签: linux bash shell unix scripting

我有一个看起来像这样的文件

example text [1234] [0] Part 2 /var/tmp/path
example text [1234] [0] Part 3 /var/tmp/path
example text [1234] [0] Some Text more text
example text [1235] [0] Part 4 /var/tmp/path
example text [1235] [0] Part 5 /var/tmp/path
example text [1236] [0] Part 6 /var/tmp/path
example text [1236] [0] other text foo bar

我有另一个文本文件,用户可以在其中编写部分。 所以它看起来像这样:

Part 2
Part 4
Part 6

我需要一个grep左右第二个文件被读取并搜索第一个括号中的数字,并将它们保存到变量中

在示例中,我需要获得输出

1234
1235
1236 

它应该在变量中用于进一步的工作

到目前为止,我尝试了

grep -F -f parts.txt search.log

但我不知道如何不显示第2,4和6部分所示的行,而只知道第一个括号内的数字

2 个答案:

答案 0 :(得分:1)

这是一种方法。

myparts=$(grep -F -f parts.txt search.log | awk -F'[][]' '{print $2}' | sort | uniq)

parts.txt是用户在其中编写部件号的文件。

grep返回部件号匹配的行。 awk使用[]作为分隔符来提取它们之间的第一个单词

答案 1 :(得分:0)

不确定是否只有一个grep语句可以做到这一点,但是一个小循环可以。

cat file2 |while read line
do
   grep $line file1|awk '{print $3}'|sed 's/\[//g'|sed 's/\]//g' >> tempfile
done

现在可以进一步使用tempfile或代替temp文件,你可以通过

将它放在变量中
abcd="$abcd (grep $line file1|awk '{print $3}'|sed 's/\[//g'|sed 's/\]//g')"