2014-03-12 56 views
-2

我想使用正則表達式匹配傳輸文本替換:O型後跟空間,一個隨機數,然後一個新行查找和使用Linux

例子:

fffffffffffffffffffffffffffffffO 11 

ffffffffffffffffO 145 

fffffffffffffffffffffffffO 257 

fffffffffffO 47 

fffffffffffffffffffO 1 

ffffffffffffO 85 

fffffffffffffffffffffffO 144 

fffffffffffffffO 356 

,並使它像這樣的:

fffffffffffffffffffffffffffffff 

ffffffffffffffff 

fffffffffffffffffffffffff 

fffffffffff 

fffffffffffffffffff 

ffffffffffff 

fffffffffffffffffffffff 

fffffffffffffff 

使用awk或者sed ...

什麼想法?

+0

要這樣一次或多次?你可以在vim或許多其他文本編輯器中輕鬆做到這一點。 – Alden

+0

如何使用vim或gedit來做到這一點?這個數字是隨機的! – saad

+0

我相信':%S/O [0-9] \ + // g'會工作在vim – Alden

回答

2

您可以使用此:

awk -F "O" '{ $2=""; print $0}' file.txt 

或較短的版本Jotne的:

awk -F\O '{$2=""}1' 

由於格倫·傑克曼表明它,你可以打印出需要的部分:

awk -F "O" '{ print $1}' file.txt 

但是,這些命令並不在乎線路中是否有另一個O,並且如果有號碼在行末。

+1

您可能也只是'$打印代替1'排空$ 2 –

+0

但是隻有在該行末尾匹配的情況下才能使用此regix! @JamCon – saad

+0

「fffffffffffffff」 是一個隨機文本,而不是僅F @JamCon – saad

0

Perl oneliner會幫你嗎?

perl -i.bak -p -e "s/(.*)O.*/$1/g" input.txt 
1

這裏現在做在sed:

sed -i 's/O\ [0-9]\+//g' file.txt


編輯: 如果有結束與 「-O [0-9] *」,然後把一個在$正則表達式的結尾將其錨定到行的末尾。

sed -i 's/O\ [0-9]\+$//g' file.txt

+0

空格不是sed正則表達式的特殊字符,所以不需要轉義。 –

+0

的確如此......這與正則表達式中的語言衆多打交道時是一種習慣勢力。它幾乎從來沒有傷害,而且它結束了,而不必去想它是更加便於攜帶。 – JamCon

+1

這可能匹配'O'後面跟一個沒有號碼的空間。 – potong

3

sed的

sed -i 's/O [0-9]\+$//' file 
+0

國際海事組織,最乾淨的方式。 –