如何在grep和sed命令中使用擴充套件的正規表示式

2021-07-09 10:48:08 字數 925 閱讀 1254

對於grep,可以使用egrep命令來替代,那麼就支援擴充套件的正規表示式了。

對於sed,只要加上引數-r就可以支援擴充套件的正規表示式了。

由於平時寫python用的正規表示式大部分都是擴充套件的正規表示式,所以,出於習慣,我喜歡更自由的擴充套件的正規表示式,使用起來不用去考慮是否支援的問題。

以下是使用的例子,假設有一堆檔案,內容都是諸如:

snme0001今天心情不錯!

stta0001明天是周五。

seef0001能把你的ipad借給我玩玩嗎?

我們想把這些檔案中不含有英文的句子合併到乙個大檔案中,我使用如下命令:

egrep '[[:alpha:]][[:digit:]]' $'\t' * | cut -d ":" -f2 | sed -e 'y/abcdefghijklmnopqrstuvwxyz/abcdefghijklmnopqrstuvwxyz/' - | sed -r -e '/\t.*[a-za-z]/!w ../m1.txt'

1. 首先把這些檔案中符合句子id格式的句子都抓出來。對於tab,egrep沒有特別好的方法來匹配,必須用$'\t'來表示,而且由於$是個特殊符號,所以得把tab專門抽出來,而不能和其他的字元或者模式放到乙個模式裡。另外,*表示當前資料夾下的所有檔案。

2. 抓取id和句子。之所以用cut,因為egrep抓出來的句子的前邊有檔名和冒號。所以,正好用cut,獲取以冒號來分割的第二部分。

3. 由於有些句子的id是大寫字母,這裡要全部轉為小寫字母。tr命令這裡實在是不好用,因為它只能對檔案進行處理。又不太會用awk,所以就用了sed的這個替換功能。y表示替換命令,然後要替換字元對前後來寫,所以abcd..和abcd的數目要相同。

4. 這裡用到了!,這個表示符號條件的就不執行命令,不符合的才執行。也就是說,凡是在tab後出現了英文本母的句子,就不寫到某個檔案內。在sed裡,是可以用\t來表示tab的,比較好。

如何在Linux中使用awk命令

文字處理是unix的核心。從管道到 proc子系統,一切都是檔案 的理念貫穿於作業系統和所有基於它構造的工具。正因為如此,輕鬆地處理文字是乙個期望成為linux系統管理員甚至是資深使用者的最重要的技能之一,而 awk是通用程式語言之外最強大的文字處理工具之一。最簡單的awk的任務是從標準輸入中選擇字...

如何在jupyter notebook中使用R語言

r語言安裝python安裝 安裝時一定要把路徑項選擇上 網上教程諸多,不再贅述。方法一推薦直接使用anaconda,上面自帶jupyter notebook而且環境配置已經設定好了 方法二以管理者身份 開啟命令提示符,轉到python的安裝路徑,採用pip命令安裝 把pip更新到最新版本,此步非必須...

linux命令 sed配合grep批量替換

sed i s g grep rl sed替換檔案中的文字 grep查詢存在文字的檔案 格式usage sed option input file i解釋 i suffix in place suffix edit files in place makes backup if suffix supp...