Sed

如果正則表達式僅存在於 csv 文件中每一行的第一列中,則刪除一行

  • February 11, 2015

我有以下逗號分隔的數據(用於視覺清晰的空格):

1 2014 23 2352 19.24 7.18
1 2014 23 2353 19.78 4.65
24 2014 23 2354 20.26 25.34
1 2014 23 2355 26.65 42.76
1 2014 23 2356 27.34 56.356
1 2014 23 2357 29.24 45.4
24 2014 23 2358 30.23 345.27
1 2014 23 2359 23.23 345.21
1 2014 24 0000 12.53 1.98
1 2014 24 0001 7.24  12.3
24 2014 24 0002 15.68 90.8

我只想刪除以 24 開頭的每一行(或保留以 1 開頭的每一行)。

所以所需的輸出將是:

1 2014 23 2352 19.24 7.18
1 2014 23 2353 19.78 4.65
1 2014 23 2355 26.65 42.76
1 2014 23 2356 27.34 56.356
1 2014 23 2357 29.24 45.4
1 2014 23 2359 23.23 345.21
1 2014 24 0000 12.53 1.98
1 2014 24 0001 7.24  12.3

我試過了

sed '/24/d' (filename)

但這會刪除整個文件中 24 的每個實例,如下所示(不需要!):

1 2014 23 2353 19.78 4.65
1 2014 23 2355 26.65 42.76
1 2014 23 2356 27.34 56.356
1 2014 23 2359 23.23 345.21

使用awk1在行首列印所有內容):

awk '/^1/{print $0}'

使用sed-n禁止列印所有內容的選項):

sed -n '/^1/p'

使用grep(也許不是文本處理的最佳選擇,但在這種情況下已經足夠好了):

grep '^1'

grep -v ^24只保留不以 24 開頭的行

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