Text-Processing

從特定列中刪除單詞(字母后跟空格)

  • November 21, 2018

我有一個文件,格式如下:

cat dog AHF123432 | 123432 | dhfshfjdh
lion  AFG23412 |23412 | dfshjhfjdhj

我需要從僅包含字母的第一列中刪除這些單詞,即第一行中的貓(後跟空格)和狗,第二行中的獅子

我的輸出將類似於:

AHF123432 | 123432 |  dhfshfjdh    
AFG23412 | 23412 | dhfshfjdh

這將刪除行首的所有純字母詞:

$ sed -r 's/^([[:alpha:]]* )*//' filename.tsv
AHF123432 | 123432 | dhfshfjdh
AFG23412 |23412 | dfshjhfjdhj

或者,將輸出保存在新文件中:

sed -r 's/^([[:alpha:]]* )*//' filename.tsv > final.tsv

這個怎麼運作

  • [[:alpha:]]*匹配任意數量的字母字元後跟一個空格。換句話說,它匹配一個後跟一個空格的單詞。

更詳細地說,[[:alpha:]]匹配單個字母字元。``

$$ [:alpha: $$]*` 匹配任意數量的此類字元。

  • ([[:alpha:]]* )*匹配任意數量的此類單詞,後跟空格。
  • ^([[:alpha:]]* )*匹配任意數量的後跟空格的單詞,但由於^, 僅從行首開始。
  • 替換命令刪除所有匹配的單詞。替換命令的形式s/old/new/在這裡,old是我們上面的表達式,它匹配從行首開始的任意數量的單詞。我們想用空來替換這些單詞,所以在這裡,我們使用空字元串new

在過去,匹配字母字元的正則表達式是[a-zA-Z]. 使用現代 unicode 字型,現在更可靠了。因為我們上面的正則表達式使用了[:alpha:],所以它是 unicode 安全的。

引用自:https://unix.stackexchange.com/questions/222841