Удаление из файла всего, кроме цифр 1, 2, 3, 4 и 5 - PullRequest
1 голос
/ 16 марта 2012

Я хочу удалить из файла все, чтобы остались только цифры 1, 2, 3, 4 и 5. Разрывы строк должны быть сохранены. Как я могу удалить все остальное из файла?

Ответы [ 3 ]

5 голосов
/ 16 марта 2012

Примерно так:

sed -i 's/[^1-5]//g' file

Вот небольшой тест:

$ echo $'ab129c\n1d3e5fqq9cm3275\ncn730m271nv05482m1'
ab129c
1d3e5fqq9cm3275
cn730m271nv05482m1
$ echo $'ab129c\n1d3e5fqq9cm3275\ncn730m271nv05482m1'|sed 's/[^1-5]//g'
12
135325
3215421
3 голосов
/ 16 марта 2012

tr должен быть более эффективным, чем sed.Копирование теста icyrock:

$ echo $'ab129c\n1d3e5fqq9cm3275\ncn730m271nv05482m1' | tr -dc "1-5\n"
12
135325
3215421

У tr есть один недостаток: он не может выполнить редактирование существующего файла на месте (как sed -i);если это то, что вы хотите записать во временный файл, замените оригинал следующим:

tr -dc "1-5\n" <file.txt >tempfile.txt && mv tempfile.txt file.txt
1 голос
/ 16 марта 2012

Я сделал это с:

sed -r 's/[^12345]//g' <file>

Это выведет его на экран, и вы можете записать в файл:

sed -r 's/[^12345]//g' <file> > <new_file>

Или вы можете редактировать файл напрямую с помощью

sed -i -r 's/[^12345]//g' <file>
...