Анализирует ли sed -n '1s / pattern / substitute / p весь файл или завершает работу после строки 1? - PullRequest
3 голосов
/ 20 марта 2012

Когда sed выполняется с адресом в одну строку (строка 1) и подстановкой на нем, например:

$ sed -n '1s/foo/bar/p' <<EOF
foo will be replaced, this is line 1
are these lines still processed?
Hard to check.
EOF

продолжает чтение / синтаксический анализ оставшейся части файла или завершает работупосле названного адреса?Я использую очень быструю систему, и кажется, что время останавливается, но без команды q я хотел убедиться.

1 Ответ

4 голосов
/ 20 марта 2012

Нет, это определенно не останавливается на моей версии sed (GNU sed версия 4.2.1).

Я создал файл со многими строками (203118592), запустив yes в течение нескольких секунд и затем нажав Ctrl-C :

$ yes > file

Это создает огромный файл с кучей строк с "у". Затем я запустил вашу команду sed, чтобы заменить "y" на "n" (вместо "foo" на "bar"), и это заняло довольно много времени:

$ wc -l file
203118592 file
$ time sed -n '1s/y/n/p' file
n

real    0m9.335s
user    0m9.237s
sys     0m0.068s

Вы просто не создали достаточно большой файл, чтобы увидеть эффект. :)

Кроме того, просто для справки, если я использую q, он выйдет, как и ожидалось:

$ time sed -n '1s/y/n/p ;q' file
n

real    0m0.002s
user    0m0.000s
sys     0m0.000s
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...