2015-05-07 2 views
0

У меня есть большой текстовый файл с тысячами слов в каждой строке.Удалите любые строки, начинающиеся с заглавной буквы

Как удалить все строки, начинающиеся с заглавной буквы и всех строк, которые являются только одной буквой.

A   -> To be deleted 
a   -> To be deleted 
abjurer 
abkar 
abkari 
Abkhas  -> To be deleted 
Abkhasian -> To be deleted 
ablach 
ablactate 
ablactation 
B   -> To be deleted 
b   -> To be deleted 
Bounce  -> To be deleted 
... 
... 

Возможно ли это сделать с Bash.

Спасибо.

+0

Определенно возможно использование любого из awk/grep/sed. Дайте ему пойти и сообщите нам, где вы застряли! – Johnsyweb

+0

Вы хотите удалить строки, начинающиеся с одной буквы ** или одного символа ** **? Измените свой вопрос, чтобы показать, что произойдет с линией, которая просто содержит номер '3', например. –

+5

Я голосую, чтобы закрыть этот вопрос как не по теме, потому что он просто просит писать код без каких-либо попыток решить проблему. – Johnsyweb

ответ

7

Вы можете использовать:

grep -Ev '^([A-Z]|.$)' file 
abjurer 
abkar 
abkari 
ablach 
ablactate 
ablactation 

Или использовать СЭД, чтобы сохранить изменения также:

sed -i.bak -r '/^.$|[A-Z]/d' file 
5

Я бы сказал:

$ awk 'length($0)>1 && !/^[A-Z]/' file 
abjurer 
abkar 
abkari 
ablach 
ablactate 
ablactation 

Это проверяет, что строка:

  • длиной более 1 символов.
  • Не начинается с прописной буквы.

Вы также можете следить за hek2mgl's good suggestion и использовать !/^[[:upper:]]/' вместо !/^[A-Z]/, чтобы не зависеть от вашего местонахождения.

+0

Спасибо, это сработало для меня. – nmvictor

+0

Может ли это быть изменено для захвата строк только с повторяющимися символами? 'аааа аа бб bbbb' – nmvictor

+7

Это звучит довольно сильно отличается от первоначального вопроса и нуждается в дополнительной информации. Вероятно, вам лучше задать новый вопрос, чтобы он дал понять. – fedorqui

4

Я хотел бы использовать sed для этого:

sed '/^.$/d;/^[[:upper:]]/d' file 

Это две команды, разделенные a ;. Первый удаляет строки, содержащие только одну букву, второй удаляет строки, начинающиеся с прописной буквы. Я действительно рекомендую вам использовать [[:upper:]] вместо [A-Z], чтобы он работал независимо от вашей локали.

5
awk '!/^([[:upper:]]|[[:alpha:]]$)/' file 

grep -Ev '^([[:upper:]]|[[:alpha:]]$)' file 

sed -r '/^([[:upper:]]|[[:alpha:]]$)/d' file 
+0

Почему вы используете 'upper | альфа'? – hek2mgl

+0

Обратите внимание на '' 'после' alpha'. Это '' upper', чтобы удалить строки, начинающиеся с буквы верхнего регистра, и '^ alpha $' для удаления строк, содержащих только букву. –

+1

О да, пропустил позицию круглых скобок. Умная! :) – hek2mgl

Смежные вопросы