在一個文件中的一些特定的模式我想刪除我的文件,與3開頭的所有單詞:和4:如何刪除其開始在UNIX
例如 -
輸入是
13 1:12 2:14 3:11
10 1:9 2:7 4:10 5:2
16 3:7 8:24
7 4:7 6:54
輸出應
13 1:12 2:14
10 1:9 2:7 5:2
14 8:24
7 6:54
有人可以告訴我,如果有可能使用sed命令或awk命令。
在一個文件中的一些特定的模式我想刪除我的文件,與3開頭的所有單詞:和4:如何刪除其開始在UNIX
例如 -
輸入是
13 1:12 2:14 3:11
10 1:9 2:7 4:10 5:2
16 3:7 8:24
7 4:7 6:54
輸出應
13 1:12 2:14
10 1:9 2:7 5:2
14 8:24
7 6:54
有人可以告訴我,如果有可能使用sed命令或awk命令。
sed 's/[[:blank:]][34]:[^[:blank:]]\{1,\}[[:blank:]]*/ /g' YourFile
Posix符合並假定沒有(如樣本中)第一個字用3:或4:表示。
隨着awk
:
awk '{for (i=1; i<=NF; i++)
{if (! sub("^[34]:", "", $i)) d=d$i" "}
print d; d=""
}' file
它通過循環的領域,只是存儲在變量d
那些不與3:
或4:
啓動。這是通過檢查sub()
函數是否返回true來完成的。當循環完成時,將打印d
變量。
爲您指定的文件:
$ awk '{for (i=1; i<=NF; i++) {if (! sub("^[34]:", "", $i)) d=d$i" "} print d; d=""}' file
13 1:12 2:14
10 1:9 2:7 5:2
16 8:24
7 6:54
使用sed
sed -r 's/ 3:[0-9]*| 4:[0-9]*//g'
$ cat input.txt
13 1:12 2:14 3:11 10 1:9 2:7 4:10 5:2 16 3:7 8:24 7 4:7 6:54
$ cat input.txt | sed -r 's/ 3:[0-9]*| 4:[0-9]*//g'
13 1:12 2:14 10 1:9 2:7 5:2 16 8:24 7 6:54
說明:
-r
=正則表達式搜索3:[0-9]*
:搜索空間,然後3,然後:,然後[0-9]或一個數字在0到9之間,*意味着他將在前面的正則表達式搜索中搜索零個或多個匹配,這是[0-9],所以*表示在這種情況下,將在第一個數字後面搜索零個或多個數字:|
:手段或4:[0-9]*
:同上,只是用3它將搜索4//
:在替換字符串,如果你把土豆身陷囹圄會鍵入它,在這種情況下, sed將根本不輸入任何內容。/g
:搜索所有傳遞給sed的輸入。感謝它的工作:) – Pranav
在這種情況下,交替是不必要的,因爲'3 | 4'可以被'[34]'替換。然而,這不會在行的開頭刪除任何這樣的字符串,因爲它正在尋找正則表達式開頭的空格。 – potong
波東是部分正確:)交替是不需要的,但如果我們假設每行的第一個數字永遠不會有:後面那麼它會正常工作。無論如何,這裏有一個更短的版本sed -r's/[34]:[0-9] * // g' – user2772936
假設所有字包含:並具有後至少一位數字的:
sed "s/ \([34]:[^\b]+\)//g" inputfile
這個匹配SPACE,3或4,冒號,然後在至少一個非字邊界。它並沒有取代它,併爲整條線路做了這樣的事情。
'\ b'的反面是'\ B',但是它不是一個字符,可以在這方面使用。 – potong
這可能會爲你工作(GNU SED):
sed 's/\b[34]:\S*\s*//g' file
尋找一個字邊界,然後要麼3
或4
其次:
和零個或多個非空格後跟零個或多個空格和刪除他們整個線路。
這會在刪除字段的任何地方留下額外的空間。 – Jotne
是的,我知道,@Jotne – fedorqui
我現在更新了另一種不留空間的方法,就在行尾。 – fedorqui