2013-09-29 5 views
0

Мне нужна помощь в создании сценария sed, который подсчитывает пробелы в белых пробелах командой sed.Подсчет лишних пробелов

Я могу подсчитать слова в строке, используя sed -n '$=', но как бы это сделать для пробелов и пробелов?

Новое в bash поэтому я признателен за любую помощь я могу получить,
Благодаря

* Edit: *

Я должен использовать sed для этого так, что если я просто хочу просто распечатать строки (с завершающими пробелами) вместо их подсчета?

Могу ли я использовать p и сделать это:

sed '/ /p' space.sed 

Не знаю, как для обозначения двух последовательных пробелов, я бы файл без ведущих пробелов, так это было бы обнаружить завершающие пробелы.

+2

Эта команда 'sed' не учитывает слова строки. – Birei

+1

Возможно, но нет. Сед только манипулирует строками, у него нет понятия чисел или подсчета. – Kevin

+0

Согласно http://www.grymoire.com/Unix/Sed.html#uh-48 sed -n '$ =' подсчитывает количество строк в файле –

ответ

5

sed -n '$=' является не

подсчета слов в строке

печатает номер строки последней строки в файле. поэтому он подсчитывает строки в файле.

Это может считаться конечными пробелами в каждой строке. (Если вы хотите их сумму, это очень легко.)

awk '{t=length($0);sub(" *$","");print t-length($0)}' file 

например, у меня есть файл (с именем, как f) с следующим содержанием, (окончание «точки» не существует, только для показывая конечные пробелы).

aaaaa  . 
bbbbb . 
ccccc . 

с AWK однострочника выше:

kent$ awk '{t=length($0);sub(" *$","");print t-length($0)}' f 
5 
4 
3 

EDIT

поскольку sed является обязательным условием для решения этой проблемы (я не могу понять, почему, хотя, если это не было домашнее задание). Эта линия работает для вашей потребности, обратите внимание, что GNU Sed требуется:

kent$ sed -r 's/(.*\S)(*$)/expr length "\2"/ge' f                               
5 
4 
3 
  • в выше SED линии, только sed использовали expr не может быть расценено как право инструмента? так ли это можно назвать решением «sed alone»?
  • В любом случае, вы пытаетесь завинтить винт с молотком.

Я только что видел обновление в вашем вопросе, если вы просто хотите, чтобы напечатать строки с конечными пробелами, это намного проще: (IMO, Grep будет лучшим инструментом для этого)

sed -n '/ \+$/p' file 

сделаю.

+0

спасибо за помощь, ваше решение отлично работает. Мне нужно сделать это с помощью sed. Не могли бы вы рассказать о том, как подсчитывать пробелы или конечные/ведущие пробелы с sed и объяснять решение с помощью sed? – Charly

+1

@Черно почему 'sed'? в любом случае, разрешено ли вам делать это с помощью sed и других инструментов? например 'bc',' wc' или даже с небольшим сценарием bash? или вы можете делать только с sed-вкладышем sed? – Kent

+0

Мне разрешено использовать инструменты с sed, как вы упомянули, было бы здорово, если бы вы могли объяснить способ с помощью wc/bc. Я просто хотел увидеть способ, которым это можно было бы сделать с помощью sed, чтобы лучше понять, потому что я новичок в этом языке. – Charly

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