Скрипт Bash для удаления всех строк в текстовом файле до строки - PullRequest
2 голосов
/ 08 января 2011

У меня есть файл с большим количеством слов, таких как:

one
two
three
four
tree
house
cat
dog
etc

и я хочу удалить все слова до "дом" таким образом, чтобы получить только:

cat
dog
etc

Ответы [ 4 ]

6 голосов
/ 08 января 2011
sed -n '0,/^house$/d;p' input.txt
0 голосов
/ 20 января 2011

Вы также можете использовать текстовый редактор Unix для этой задачи.Обратите внимание, что ed считывает весь файл в память и редактирует файлы на месте без предварительного резервного копирования.

# prints result to stdout
printf '%s\n' H ',g/^house$/1,/^house$/d' ',p' | ed -s file
printf '%s\n' H ',g/^house$/1,//d' ',p' | ed -s file  # short version

# edits file in-place
printf '%s\n' H ',g/^house$/1,/^house$/d' wq | ed -s file

Для получения дополнительной информации об ed см .:

"Редактирование файлов с текстом edредактор из скриптов ",

http://wiki.bash -hackers.org / howto / edit-ed

0 голосов
/ 08 января 2011

Вы можете легко это сделать с помощью однострочного Perl, который вы, конечно, можете включить в скрипт bash.

$ perl -ne 'print if $ok; $ok=1 if /^house$/' sample.txt 
cat
dog
etc
0 голосов
/ 08 января 2011
awk '
    BEGIN                  { noprint = 1; cue = ARGV[1]; ARGV[1] = ""}
    (!noprint)             { print }
    (noprint && $0 == cue) { noprint = 0 }
' house textfile
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...