Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unix 基于以2个字符和数字开头的模式使用sed筛选文本_Unix_Sed_Awk - Fatal编程技术网

Unix 基于以2个字符和数字开头的模式使用sed筛选文本

Unix 基于以2个字符和数字开头的模式使用sed筛选文本,unix,sed,awk,Unix,Sed,Awk,我有一个不断改变格式的文件,但它总是包含我需要检索的模式 以下是示例文件的几行: 1 PL000000002002695895 611 1/11/2013 2 PL000000002002785424 359 7/11/2013 3.-PL000000002002121651 11 DAY 24/11/2013 4.-

我有一个不断改变格式的文件,但它总是包含我需要检索的模式

以下是示例文件的几行:

1    PL000000002002695895        611         1/11/2013  
2    PL000000002002785424        359         7/11/2013  
3.-PL000000002002121651                               11                     DAY 24/11/2013
4.-PL000000002002343228                               43                     DAY 29/11/2013
5    PL000000002002232587          NEW   360         30/11/2013
我尝试使用这两个命令从列表#3和#4中筛选,但检索其他字段时仍然遇到问题

以下是我使用的命令:

awk 'substr($1,4,2) == "PL" {print substr($1,4)}' sample > sample2
上面的命令不会过滤行首的两位数

awk '{print $1}' sample | sed 's/^[[:digit:]]*\.\-//g' > sample2
这一个只适用于特殊情况


任何帮助都将不胜感激

为什么不检查第一个字段中是否存在
PL

awk 'index($1, "PL")' sample > sample2

为什么不检查第一个字段中是否存在
PL

awk 'index($1, "PL")' sample > sample2

不确定这是否是您想要的输出,但它可用于任何操作系统上的任何sed:

$ cat file
1    PL000000002002695895        611         1/11/2013  
2    PL000000002002785424        359         7/11/2013  
3.-PL000000002002121651                               11                     DAY 24/11/2013
4.-PL000000002002343228                               43                     DAY 29/11/2013
5    PL000000002002232587          NEW   360         30/11/2013
$ 
$ sed 's/.*\(PL[0-9]*\).*/\1/' file
PL000000002002695895
PL000000002002785424
PL000000002002121651
PL000000002002343228
PL000000002002232587

如果这不是您想要的,请在必要时使用更具代表性的输入更新您的问题,并确定一些预期输出。

不确定这是否是您想要的输出,但它可以与任何操作系统上的任何sed一起使用:

$ cat file
1    PL000000002002695895        611         1/11/2013  
2    PL000000002002785424        359         7/11/2013  
3.-PL000000002002121651                               11                     DAY 24/11/2013
4.-PL000000002002343228                               43                     DAY 29/11/2013
5    PL000000002002232587          NEW   360         30/11/2013
$ 
$ sed 's/.*\(PL[0-9]*\).*/\1/' file
PL000000002002695895
PL000000002002785424
PL000000002002121651
PL000000002002343228
PL000000002002232587

如果这不是您想要的,请在必要时使用更具代表性的输入更新您的问题,并确定一些预期的输出。

我尝试使用awk索引,但它没有提供任何结果,我想我使用的unix框已经完全过时。我想我应该从一开始就提到这一点,我在这个HP-UX设备中无法使用csh。我不知道这是否有帮助,但我也尝试过使用match,但没有任何结果。@sayayinx,关于
grep'^[^[:space:]\+PL'sample
?我运气不好,使用grep我没有收到任何输出:(我尝试过使用awk索引,但它没有提供任何结果,我想我使用的unix框已经完全过时了。我想我应该从一开始就提到这一点,我一直在HP-UX框中使用csh。我不知道这是否有帮助,但我也尝试过使用match,但我没有任何结果。@sayayinx,
grep'^[^[:space:][\+PL'示例
?我运气不好,使用grep时没有收到任何输出:(非常感谢,这正是我要找的!非常感谢,这正是我要找的!