как я могу переместить все строки, начинающиеся с 'foobar' в конец файла? - PullRequest
3 голосов
/ 04 ноября 2011

Скажем, у меня есть скрипт с количеством строк, начинающихся foobar

Я хотел бы переместить все строки в конец документа, сохраняя их порядок

например. перейти от:

# There's a Polar Bear
# In our Frigidaire--
foobar['brangelina'] <- 2
# He likes it 'cause it's cold in there.
# With his seat in the meat
foobar['billybob'] <- 1
# And his face in the fish

до

# There's a Polar Bear
# In our Frigidaire--
# He likes it 'cause it's cold in there.
# With his seat in the meat
# And his face in the fish
foobar['brangelina'] <- 2
foobar['billybob'] <- 1

Это насколько я получил:

grep foobar file.txt > newfile.txt
sed -i 's/foobar//g' foo.txt
cat newfile.txt > foo.txt

Ответы [ 5 ]

3 голосов
/ 04 ноября 2011

Это может работать:

sed '/^foobar/{H;$!d;s/.*//};$G;s/\n*//' input_file

РЕДАКТИРОВАТЬ: исправлено для углового случая, когда foobar находится на последней строке

2 голосов
/ 04 ноября 2011
grep -v ^foobar file.txt >newfile.txt
grep ^foobar file.txt >>newfile.txt

нет необходимости во временном файле

2 голосов
/ 04 ноября 2011

Это будет делать:

grep -v ^foobar file.txt > tmp1.txt
grep ^foobar file.txt > tmp2.txt
cat tmp1.txt tmp2.txt > newfile.txt
rm tmp1.txt tmp2.txt

Опция -v возвращает все строки, которые не соответствуют данному шаблону. ^ отмечает начало строки, поэтому ^foobar соответствует строкам , начинающимся с foobar.

2 голосов
/ 04 ноября 2011
grep -v ^foobar file.txt > file1.txt
grep ^foobar file.txt > file2.txt
cat file2.txt >> file1.txt
1 голос
/ 04 ноября 2011

Вы также можете сделать:

vim file.txt -c 'g/^foobar/m$' -c 'wq'

Переключатель -c означает, что следует команда Ex, команды g работают на всех строках, содержащих данный шаблон, и действие здесь m$что означает «перейти в конец файла» (это сохраняет порядок).wq означает «сохранить и выйти из vim».

Если это слишком медленно, вы также можете запретить vim читать vimrc:

vim -u NONE file.txt -c 'g/^foobar/m$' -c 'wq'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...