通过使用awk,sed或perl在指定列中指定其范围来删除或删除特定字符

时间:2017-09-23 09:49:16

标签: regex perl awk sed text-processing

我需要从第一列“Table pagination shows '1' only, next button disabled. I can solve the issue by select the number at top left corner, but it shown in one page which I don't want. ”中删除特定字符(例如:从第3列中间指定5到10个章程的范围)。我试过这个命令 _p1.pdb_________________但它会删除从_p开始的所有内容。我必须删除38690797行。那么,任何人都可以提供有效的指令吗?

我检查过所有以前的问题,没有给出我需要的确切内容。

示例输入文件:

sed 's/_p.*//' test

期望的输出:

    EAZ51036_p1.pdb_________________ SSPP00000432782.1_1_p1.pdb______ 0.834183 0.812304    11175    11476     9322
    BBX51096_p1.pdb_________________ EEEP00000435284.1_1_p1.pdb______ 0.834183 0.812304    11175    11476     9322
    CCZ58032_5j3b_p3.pdb____________ NNNP00000343764.6_192_p1.pdb____ NULL____ NULL____ ________ ________ ________
    WWW25032_5j3b_p6.pdb____________ GGGP00000343764.6_192_p2.pdb____ 0.866667 0.070452     7750      630      546
    EEX51032_5j3b_p3.pdb____________ FFFP00000343764.6_192_p3.pdb____ NULL____ NULL____ ________ ________ ________
    EEX51032_p9.pdb_________________ RRRP00000436941.1_1_p1.pdb______ 0.807338 0.807338    11175    11175     9022

2 个答案:

答案 0 :(得分:1)

使用sed:

sed 's/_[^ ]*//' file

答案 1 :(得分:0)

尝试关注awk一次。

awk '{sub(/_.*_/,"",$1)} 1'  Input_file

说明:我在这里使用名为sub的开箱即用函数代替。它适用于sub(regex_which_we_want_to_change_in_lines,new regex/variable,variable/line)。所以我在_.*_(第一个字段)$1中提供,意味着从_.*开始(涵盖所有内容,直到_为NULL。然后提及1表示,awk适用于condition then action的方法,所以这里我的条件为TRUE而不提及任何操作,因此默认情况下会发生打印操作,这将打印当前(编辑/未编辑)的行输入文件。