Text-Processing
從特定列中刪除單詞(字母后跟空格)
我有一個文件,格式如下:
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 安全的。