Как заменить двойную новую строку одним с помощью TR?

Когда вы устанавливаете CentOS с помощью установщика с графическим интерфейсом, очень легко пропустить часть конфигурации, в которой вы разрешаете запускать сетевой интерфейс при загрузке системы.

Вы должны отредактировать / etc / sysconfig / network-scripts / ifcfg-YOUR_NIC_NAME , а именно:

ONBOOT=yes

в следующий раз, когда вы загрузите сервер, сетевая карта должна быть задействована.

0
05.01.2019, 12:44
1 ответ

trпросматривает только один символ за раз, поэтому tr ab cdуказывает изменитьa-> cиb-> d. Неважно, в каком порядке появляются символы, или отсутствуют ли какие-либо из них, поэтому:

$ echo "a b bba" | tr ab cd
c d ddc

Если второй список короче, он расширяется до длины первого за счет повторения последнего символа. Таким образом, tr abc dизменит любой из a, b, cна d, а tr '\n\n' '\n'изменит новые строки на новые строки, что ничего не делает.

$ echo "a b bcba" | tr abc d
d d dddd

Тем не менее, есть опция -sдля squeezeидентичных символов после замены, поэтому tr -d '\n' '\n'заменит новые строки на новые строки, а затем оставит только одну новую строку в строке:

$ cat test.txt
foo


bar

doo
$ cat test.txt  | tr -s '\n' '\n'
foo
bar
doo

Обратите внимание, что в вашем примере две пустые строки, поэтому три новых строки подряд. Если вы хотите удалить новые строки, чтобы между абзацами оставалась только одна пустая строка(две новые строки ), то я не думаю, что вы можете сделать это с tr. Но вы можете использовать, например. awk. С test.txtсверху:

$ awk '/./ { e=0 } /^$/ { e += 1 } e <= 1' < test.txt  
foo

bar

doo
0
28.01.2020, 04:05

Теги

Похожие вопросы