Питання більш-менш каже все це. Я знаю, що /^$/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.