Вот что у меня есть
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 ?
Как добавить строки, начинающиеся с символов не в верхнем регистре, которые добавляются каждый к предыдущей строке?
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
Как насчет Bash с одним вкладышем?
while read L; do case $L in [A-Z]*) echo ;; esac; echo -n "$L "; done; echo
sed -r ':a;N;$!ba;s/\n([^A-Z])/ \1/g'
:a
создать метку b
N
Поиск всех линий, соединенных вместе, вместо поиска строка за строкой
$!
, если не последняя строка , b
ответвление (перейти к) метке a
(пропустить последнюю строку, потому что последняя строка имеет последний перевод строки)
s
замещение
\n\([^A-Z]\)
соответствует переводу строки ничем не заглавными буквами. (
и )
объединяют все, что не является заглавной буквой.
/ \1/'
замените наше совпадение пробелом, за которым следует группа 1
g
скопируйте содержимое буфера хранения в пространство образца
Учитывая, что некоторые предложения могут включать и заглавные слова, возможно, это может быть решением, которое вы ищете:
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'
Для первого образца:
awk '{$1=$1}1' RS= file
для второго образца:
awk '/^[[:upper:]]/{print x}1' file | awk '{$1=$1}1' RS=