Shell Delete sed - PullRequest
       6

Shell Delete sed

0 голосов
/ 13 апреля 2011

У меня есть файл с некоторыми данными, подобными этим:

1, 3, 0, 0, 0
0, 4, 5, 0, 5
2, 6, 0, 1, 0

Я хотел бы написать сценарий оболочки для удаления всех строк, где 3-й аргумент равен 0 (здесь строки 1 и 2)

Я уже знаю, что

sed -i '/0/d' file.txt

но я не знаю, как я могу выбрать третьи аргументы независимо от других.

У вас есть идея?

Ответы [ 3 ]

3 голосов
/ 13 апреля 2011

Awk может быть лучшим инструментом для этой задачи, чем sed:

awk -F' *, *' '$3 != 0 {print}' FILE

Но sed может сделать это:

sed -i '/^[0-9][0-9]*, [0-9][0-9]*, 0,/d' FILE
2 голосов
/ 13 апреля 2011
sed -iE '/^([^,]+,){2} 0,/d' file

объяснено с помощью объясните.py :

sed -iE '/^([^,]+,){2} 0,/d' file
\_/  ||  ||| || || \_/ | |
 |   ||  ||| || ||  |  | \- delete command
 |   ||  ||| || ||  |  |
 |   ||  ||| || ||  |  \- followed by blank zero komma
 |   ||  ||| || ||  |
 |   ||  ||| || ||  \- two times this inner pattern
 |   ||  ||| || ||
 |   ||  ||| || |\- followed by a comma
 |   ||  ||| || |
 |   ||  ||| || \- at least one of them
 |   ||  ||| ||
 |   ||  ||| |\- komma
 |   ||  ||| |
 |   ||  ||| \- not
 |   ||  |||
 |   ||  ||\- start of pattern, group of characters, which are
 |   ||  ||
 |   ||  |\- at begin of line
 |   ||  |
 |   ||  \- start of pattern for delete command
 |   ||
 |   |\- Extended regexp (parenthesis and braces without masking)
 |   |
 |   \- inplace changes
 |
 \- run sed
0 голосов
/ 13 апреля 2011

awk с редактированием на месте (аналогично sed -i)

awk '$3!="0,"{print $0>FILENAME}' file

Рубин (1,9 +)

ruby -ane 'print unless $F[2]=="0," ' file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...