Питання більш-менш каже все це. Я знаю, що /^$/dбуде видалено всі порожні рядки, але я не можу зрозуміти, як сказати "замінити два чи більше порожніх рядків одним порожнім рядком"
Будь-які ідеї?
Питання більш-менш каже все це. Я знаю, що /^$/dбуде видалено всі порожні рядки, але я не можу зрозуміти, як сказати "замінити два чи більше порожніх рядків одним порожнім рядком"
Будь-які ідеї?
Відповіді:
Якщо ви не стріляєте з vim або sed для іншого використання, кішка насправді має простий спосіб згорнути кілька порожніх рядків, просто скористайтеся cat -s.
Якщо ви вже були в vim і хотіли залишитися там, ви можете зробити це за допомогою внутрішнього пошуку і замінити видачею: :%s!\n\n\n\+!^M^M!g(^ M - візуальне зображення нового рядка, ви можете ввести його, натиснувши Ctrl+ vEnter), або збережіть собі друкуючи, просто викладаючи кішку: :%!cat -s.
:%!cat -s. Навчіться що-небудь GNnew щодня!
%s!\n\n\n\+!\r\r!g
Використовуйте \nдля позначення нового рядка в шаблоні пошуку. Використовуйте Ctrl+ Mу тексті заміни або зворотній зв'язок. Дивіться :help patternта :help sub-replace-special(пов’язані з :help :s).
%s/\(\n\n\)\n\+/\1/
\nне працює в тексті заміни.
Якщо у Vim, просто зробіть це:
:%!cat -s
manсторінки.
Використання Perl:
perl -00 -pe ''
-00 Опція командного рядка вмикає режим призупинення абзацу, тобто Perl читає текст абзац за абзацом, а не рядок за рядком.
З sed (GNU sed) 4.2.2:
sed -r '
/^\s*$/ {
# blank line
:NEXT
N # append next line to pattern space - if none, autoprint PS and exit
s/^\s*$\n^\s*$//g;t NEXT # if 2 blank lines, clear PS and loop to NEXT
}
# else, autoprint PS and next/exit
' < $MYFILE
Я знаю, що це нерозумний код, але я хотів вирішити це питання менше ніж за 10 хв, і воно спрацювало
for file in /directory/*
do
originalname=$file
us='_'
tempname=$file$us
echo $originalname
mv $originalname $tempname
uniq $tempname $originalname
rm $tempname
done
uniqвидаляє сусідні рівні лінії. Що не те, чого хоче ОП.
-sваріант кота - просто історична записка, його немає в POSIX, але, здається, він доступний у BSD та GNU cat.