2013-05-14 2 views
0

Я хотел заменить одну строку с помощью СЭД, но есть две одинаковые строки:Почему sed дает две одинаковые строки?

$ sed '50s/false/true/p' ./src/com/android/quicksearchbox/SearchableSource.java >SearchableSource.java.1 



$ diff SearchableSource.java.1 ./src/com/android/quicksearchbox/SearchableSource.java 
50,51c50 
<  private static final boolean DBG = true; 
<  private static final boolean DBG = true; 
--- 
>  private static final boolean DBG = false; 

Почему? Как сделать, чтобы я хотел?

+1

Если вы хотите заменить значение DBG с false на true, лучше совместить его вместо 50-й строки: 'sed '/ DBG/s/false/true /'' – aragaer

ответ

1

p в конце означает «печать». Вы сказали sed распечатать строку после успешной замены. Sed печатает каждую строку (если не сказать, что она не -n) в любом случае. Вы не сказали нам, что хотите, поэтому либо удалите окончательный p, либо укажите опцию -n.

0

Удалите p после последнего/... вы делаете поиск & замените, а затем распечатайте результат.

0

Поскольку модификатор p в конце вашей команды означает «печать». Поведение по умолчанию sed предназначено для печати, поэтому вы получаете оба. Используйте sed -n, если вы хотите по умолчанию не печатать или удалить p.

Смежные вопросы