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 ?

Кроме того, как я могу добиться того же:

1
задан 9 March 2013 в 00:27

4 ответа

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

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'
3
ответ дан 25 May 2018 в 00:42
  • 1
    Оно работает. Но у меня проблема. В моем фактическом файле между обоими предложениями нет места, поэтому выходные имена в одной строке! любая помощь ? – Mina Mohsen 8 March 2013 в 23:54

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

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   
3
ответ дан 25 May 2018 в 00:42
  • 1
    У меня проблема. В моем фактическом файле между обоими предложениями нет места, поэтому выходные имена в одной строке! любая помощь ? – Mina Mohsen 8 March 2013 в 23:52
  • 2
    @MinaMohsen: Я обновил свой ответ. Но, пожалуйста, не меняйте требования в вопросе. Вместо этого задайте новый вопрос. – H.-Dirk Schmitt 9 March 2013 в 00:49
  • 3
    Я думаю, что это не относится к специальным символам, я имею в виду «?». Хорошо, я в следующий раз. – Mina Mohsen 9 March 2013 в 00:57

Как насчет однострочного bash?

while read L; do case $L in [A-Z]*) echo ;; esac; echo -n "$L "; done; echo
1
ответ дан 25 May 2018 в 00:42
  • 1
    Некоторые строчные буквы все еще существуют в начале некоторых строк, не знаю почему! – Mina Mohsen 9 March 2013 в 00:55
  • 2
    @MinaMohsen Можете ли вы показать мне, где это происходит? Я не могу воспроизвести это. Вышеприведенные два примера выглядят хорошо. – zwets 9 March 2013 в 01:14

С первым образцом:

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

со вторым образцом:

awk '/^[[:upper:]]/{print x}1' file | awk '{$1=$1}1' RS=
0
ответ дан 25 May 2018 в 00:42

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

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