Как удалить строку, в которой есть специальные символы - PullRequest
3 голосов
/ 29 октября 2011

У меня большой текстовый файл, в котором много специальных символов, таких как «$! @% # $ /», Плюс еще много, и я хотел бы удалить строку в текстовом файле, если в нем есть какие-либо специальные символыэта линия.Единственные символы, которые я хочу сохранить - это аз и аз.

Если бы это был файл ...

!Somejunk)(^%
)%(&_
this
my_file
is
*(%%$
the
they're
file

Тогда осталось бы только ...

this
is
the
file

Решение с помощью команды linuxлучше использовать инструменты линии, или скрипт bash, или скрипт python, но все, что работает, подойдет!

Ответы [ 7 ]

8 голосов
/ 29 октября 2011
$ grep '^[[:alpha:]]\+$' << EOF
> !Somejunk)(^%
> )%(&_
> this
> my_file
> is
> *(%%$
> the
> they're
> file
> EOF
this
is
the
file
3 голосов
/ 29 октября 2011

Это похоже на работу:

 sed '/[^[:alpha:]]/d' source_file
1 голос
/ 29 октября 2011

Если вы хотите сохранить ТОЛЬКО строки с буквенными символами (как запрошено OP), тогда:

$ grep -v '[^a-zA-Z]' foo

Или, если хотите, только Английский символов:

$ grep -v '[^abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ]' foo

Но если вы просто хотите удалить не-буквенные символы, sed сделает всю работу:

$ cat foo | sed 's/[^a-zA-Z]//g'

Или, если вы просто хотите уничтожить двоичные , непечатные данные, используйте строки:

$ strings foo
0 голосов
/ 29 октября 2011

Я собираюсь пойти по-настоящему нубийски.

x = open('file','r')
y = x.read().split('\n')
x.close()

for z in range (0, len(y)):
    for a in range (0, len(y[z])):
        if not y[z][a].isalpha() and not y[z][a].isdigit():
            y[z][a] = ''

OutputString = '\n'.join(y)
0 голосов
/ 29 октября 2011

или как это полностью в Bash

#!/bin/bash

file=$(cat file.txt);

for line in $file; do
    if [[ $line =~ ^[a-zA-Z]+$ ]]; then
        echo $line
    fi
done
0 голосов
/ 29 октября 2011

Вы можете использовать следующую команду для фильтрации необходимых строк:

grep '^ [A-Za-z] \ + $' file

Ifвы даже не допускаете пробелы в строках, вы можете пропустить пробел после z .

0 голосов
/ 29 октября 2011

grep -v и некоторые регулярные выражения?

скажем, egrep -v '[^a-zA-Z]'

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...