sed: различие между “sed 's/\-.*//” и “sed '/\-/s/\-.*//gw”

Я изучаю немногих простых sed команды.

Команда № 1

sed 's/\-.*//gw without' tgs.txt

Команда № 2

sed '/\-/s/\-.*//gw with' tgs.txt

Вывод № 1

$ cat with
2. Databases 
6. Windows
 Raja

Вывод № 2

$ cat without 
2. Databases 
6. Windows
 Raja

Различие Между ними

$ diff with without 
$

Каково различие между этими двумя командами?

1
задан 23 August 2017 в 18:37

2 ответа

Нет никакого различия между ними в действительности:

sed 's/\-.*//g'
sed '/\-/s/\-.*//g'

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

Теперь, если бы Вы использовали /Raja/ в качестве адреса вместо этого, Вы только видели бы последнюю строку в with - то есть, только те строки, которые содержали Raja, и выполнили замену.

3
ответ дан 3 December 2019 в 06:32

Эти две команды sed,

sed 's/\-.*//g'
sed '/\-/s/\-.*//g'

сделают то же задание. Позвольте мне объяснить как..

sed 's/\-.*//g'

заменит все символы от - до последнего знака с пустой строкой. Если строка не будет иметь никакого - символ тогда, то замена не произойдет. Таким образом, это не будет влиять на строки, которые не имеют дефиса - символ.

sed '/\-/s/\-.*//g'

будет сначала искать строки, которые имеют - символ. Если это найдет кого-либо, то это сделает замену (заменяет все символы от - до последнего знака с пустой строкой) на тех строках.

, Таким образом, оба тот же . Ваша первая команда sed была бы достаточно. Вы не должны помещать условие поиска. Кроме того, с тех пор - не специальный символ, Вы не должны выходить из него.

3
ответ дан 3 December 2019 в 06:32

Другие вопросы по тегам:

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