sed / awk делает строки, начинающиеся с нижних символов, объединенными с предыдущей строкой

Вот что у меня есть

This
is
a
sample
text

How
to
do
it
?

Мне нужно, чтобы результат был:

This is a sample text
How to do it ?

В дополнение Как я могу добиться того же с:

This
is
a
sample
text
How
to
do
it
?

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

2
задан 8 March 2013 в 22:27

5 ответов

bash buildins - самый быстрый способ :-)

declare -a A
mapfile -t A <inputFile
for line in "${A[@]}"
do
  if [ -n "${line}" ]
  then
     if [ "${line}" = "${line^}" ]
     then
         echo -en "\n${line} "
     else
         echo -n "${line} "
     fi      
 else 
    echo "" # newline, because input line was empty
  fi
done   
0
ответ дан 8 March 2013 в 22:27

Как насчет Bash с одним вкладышем?

while read L; do case $L in [A-Z]*) echo ;; esac; echo -n "$L "; done; echo
0
ответ дан 8 March 2013 в 22:27
sed -r ':a;N;$!ba;s/\n([^A-Z])/ \1/g'

:a создать метку b

N Поиск всех линий, соединенных вместе, вместо поиска строка за строкой

$!, если не последняя строка , b ответвление (перейти к) метке a (пропустить последнюю строку, потому что последняя строка имеет последний перевод строки)

s замещение

\n\([^A-Z]\) соответствует переводу строки ничем не заглавными буквами. ( и ) объединяют все, что не является заглавной буквой.

/ \1/' замените наше совпадение пробелом, за которым следует группа 1

g скопируйте содержимое буфера хранения в пространство образца

Кредит принадлежит здесь и здесь и здесь .

0
ответ дан 8 March 2013 в 22:27

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

sed -n '
1h
1!H
$ {
        g
        s/\n\n/<br>/g
        p
}
' | \
sed -n '
1h
1!H
$ {
        g
        s/\n/ /g
        p
}
' | \
sed -e 's/<br>/\n/g'
0
ответ дан 8 March 2013 в 22:27

Для первого образца:

awk '{$1=$1}1' RS= file

для второго образца:

awk '/^[[:upper:]]/{print x}1' file | awk '{$1=$1}1' RS=
0
ответ дан 8 March 2013 в 22:27

Другие вопросы по тегам:

Похожие вопросы: