(Modified Descriptive)Shell脚本如何显示搜索字符串的具体内容?

时间:2012-06-04 06:08:12

标签: unix

这是我的问题:

/path/newdir/newtext.csv 

newtext.csv如下所示:

记录1

第1行 第2行 样品编号:123456789(第3行) | | | | | 时间:2012-05-29T10:21:06Z(第21行) | | | 超时时间:2012-05-29T13:07:46Z(第30行)

记录2

第1行 第2行 型号:363214563(第3行) | | | | | 时间:2012-05-29T10:21:06Z(第21行) | | | 超时时间:2012-05-29T13:07:46Z(第30行)

记录3

第1行 第2行 型号:987654321(第3行) | | | | | 时间:2012-05-29T10:21:06Z(第21行) | | | 超时时间:2012-05-29T13:07:46Z(第30行)

假设newtext.csv中有这样的100条记录 所以,现在我需要输入的i / p字符串的参数,这是下面的

示例输入搜索字符串:

123456789

示例输出:

Sample Number: 123456789
Time In: 2012-05-29T10:21:06Z
Time Out: 2012-05-29T13:07:46Z

这正是我需要的。你能帮我吗?

1 个答案:

答案 0 :(得分:0)

Perl应该更适合执行此任务。

    $ cat newtext.csv 
    line 1 line 2 Sample Number: 123456789 (line no. 3) | | | | | Time In: 2012-05-29T10:21:06Z (line no. 21) | | | Time Out: 2012-05-29T13:07:46Z (line no. 30)
    line 1 line 2 Sample Number: 363214563 (line no. 3) | | | | | Time In: 2012-05-29T10:21:06Z (line no. 21) | | | Time Out: 2012-05-29T13:07:46Z (line no. 30)
    line 1 line 2 Sample Number: 987654321 (line no. 3) | | | | | Time In: 2012-05-29T10:21:06Z (line no. 21) | | | Time Out: 2012-05-29T13:07:46Z (line no. 30)

您可以使用 one-liner 获得预期结果,无论字段数量多少,只需编写正则表达式即可。

# perl -lane '/(Sample Number:\s*\d+).*(Time In:\s*\S+).*(Time Out:\s*\S+)/;print $1."\n".$2."\n".$3' newtext.csv
Sample Number: 123456789
Time In: 2012-05-29T10:21:06Z
Time Out: 2012-05-29T13:07:46Z
Sample Number: 363214563
Time In: 2012-05-29T10:21:06Z
Time Out: 2012-05-29T13:07:46Z
Sample Number: 987654321
Time In: 2012-05-29T10:21:06Z
Time Out: 2012-05-29T13:07:46Z