Как я могу сделать & ldquo; sed & rdquo; быть конкретным при поиске фразы

Я использую «sed» для поиска и удаления фразы в текстовом файле. Он отлично работает, но я не могу показаться, что он становится конкретным. Например, это моя команда «sed»:

sed -i 's/foobox.com//' ~/Foo/fooman.txt

Я ищу 6 конкретных фраз в ~ / Foo / fooman.txt

, которые они:

dl-web.foobox.com
dl.foobox.com
foobox.com
fooboxdownloads.com
www.foobox.com
www.fooboxdownloads.com

Когда я запускаю sed -i 's/foobox.com//' ~/Foo/fooman.txt, он находит все enty с «foobox.com» и удаляет его, но оставляет там левые надписи (например, «dl-web.» «dl.» «downloads.com» " www. "" www.downloads.com ".

Могу ли я заставить« sed »использовать« подстановочный знак »при поиске фразы? Если да, то где положить шаблон (я уже пробовал ( *), который не работает). Если вы не используете подстановочный знак, можете «sed» использовать какой-либо другой метод, чтобы получить конкретный (dl-web.foobox.com), а не просто общий (foobox.com)? id «sed» может 't трюк, есть ли еще одна команда CI, которая бы сделала трюк?

Спасибо за любую помощь, я новичок в Linux и написала команды CI.

1
задан 21 May 2012 в 20:56

16 ответов

[[:alnum:].-] будет соответствовать алфавитному или цифровому символу, или . или -. Положите * после него, и он будет соответствовать нулю или больше этого (жадно). Вероятно, это должно охватывать возможные символы в имени хоста. Также обратите внимание, что . соответствует любому символу, поэтому, если вы хотите соответствовать только ., вам нужно сбежать от него с помощью \ или заключить его в [ и ] (то есть: \. ] или [.]). Итак:

sed -i 's/[[:alnum:].-]*foobox\.com[[:alnum:].-]*//g' file

может быть тем, что вы хотите. Обратите внимание, что нестандартная опция -i для GNU и BSD sed не edit файлов, она заменяет файлы . В вашем случае это может не иметь значения, просто имейте в виду, что если какой-либо из файлов является ссылками, эти ссылки будут нарушены. Если это имеет значение, подумайте об использовании командного редактора файлов, например ed или ex.

См. http://xrl.us/sedintro#uh-0 для приятного введения sed.

1
ответ дан 25 July 2018 в 18:48

зависит от того, как строки ограничены

Скажите, что ваши ограничены пробелами, тогда что-то вроде этого может сделать трюк:

sed 's/ .*foobox.*\.com / /g'

. 'g' будет убедиться, что если в строке имеется более одного совпадения, все совпадения будут заменены

, проверенными с помощью

DEF  dl-web.foobox.com XYZ
DEF dl.foobox.com XYZ
DEF  foobox.com XYZ
DEF  fooboxdownloads.com XYZ
DEF  www.foobox.com XYZ
DEF  www.fooboxdownloads.com XYZ 

, производя

DEF XYZ
DEF XYZ
DEF XYZ
DEF XYZ
DEF XYZ
DEF XYZ 
1
ответ дан 25 July 2018 в 18:48

Не могли бы вы использовать grep? Команда

cat ~/Foo/fooman.txt | grep -v foobox.com

удалит все строки, содержащие фразу foobox.com. Это то, что вы хотели сделать?

0
ответ дан 25 July 2018 в 18:48

Не могли бы вы использовать grep? Команда

cat ~/Foo/fooman.txt | grep -v foobox.com

удалит все строки, содержащие фразу foobox.com. Это то, что вы хотели сделать?

0
ответ дан 2 August 2018 в 00:58

зависит от того, как строки ограничены

Скажите, что ваши ограничены пробелами, тогда что-то вроде этого может сделать трюк:

sed 's/ .*foobox.*\.com / /g'

. 'g' будет убедиться, что если в строке имеется более одного совпадения, все совпадения будут заменены

, проверенными с помощью

DEF  dl-web.foobox.com XYZ
DEF dl.foobox.com XYZ
DEF  foobox.com XYZ
DEF  fooboxdownloads.com XYZ
DEF  www.foobox.com XYZ
DEF  www.fooboxdownloads.com XYZ 

, производя

DEF XYZ
DEF XYZ
DEF XYZ
DEF XYZ
DEF XYZ
DEF XYZ 
1
ответ дан 2 August 2018 в 00:58

[[:alnum:].-] будет соответствовать алфавитному или цифровому символу, или . или -. Положите * после него, и он будет соответствовать нулю или больше этого (жадно). Вероятно, это должно охватывать возможные символы в имени хоста. Также обратите внимание, что . соответствует любому символу, поэтому, если вы хотите соответствовать только ., вам нужно сбежать от него с помощью \ или заключить его в [ и ] (то есть: \. ] или [.]). Итак:

sed -i 's/[[:alnum:].-]*foobox\.com[[:alnum:].-]*//g' file

может быть тем, что вы хотите. Обратите внимание, что нестандартная опция -i для GNU и BSD sed не edit файлов, она заменяет файлы . В вашем случае это может не иметь значения, просто имейте в виду, что если какой-либо из файлов является ссылками, эти ссылки будут нарушены. Если это имеет значение, подумайте об использовании командного редактора файлов, например ed или ex.

См. http://xrl.us/sedintro#uh-0 для приятного введения sed.

1
ответ дан 2 August 2018 в 00:58

Не могли бы вы использовать grep? Команда

cat ~/Foo/fooman.txt | grep -v foobox.com

удалит все строки, содержащие фразу foobox.com. Это то, что вы хотели сделать?

0
ответ дан 4 August 2018 в 16:28

зависит от того, как строки ограничены

Скажите, что ваши ограничены пробелами, тогда что-то вроде этого может сделать трюк:

sed 's/ .*foobox.*\.com / /g'

. 'g' будет убедиться, что если в строке имеется более одного совпадения, все совпадения будут заменены

, проверенными с помощью

DEF  dl-web.foobox.com XYZ
DEF dl.foobox.com XYZ
DEF  foobox.com XYZ
DEF  fooboxdownloads.com XYZ
DEF  www.foobox.com XYZ
DEF  www.fooboxdownloads.com XYZ 

, производя

DEF XYZ
DEF XYZ
DEF XYZ
DEF XYZ
DEF XYZ
DEF XYZ 
1
ответ дан 4 August 2018 в 16:28

[[:alnum:].-] будет соответствовать алфавитному или цифровому символу, или . или -. Положите * после него, и он будет соответствовать нулю или больше этого (жадно). Вероятно, это должно охватывать возможные символы в имени хоста. Также обратите внимание, что . соответствует любому символу, поэтому, если вы хотите соответствовать только ., вам нужно сбежать от него с помощью \ или заключить его в [ и ] (то есть: \. ] или [.]). Итак:

sed -i 's/[[:alnum:].-]*foobox\.com[[:alnum:].-]*//g' file

может быть тем, что вы хотите. Обратите внимание, что нестандартная опция -i для GNU и BSD sed не edit файлов, она заменяет файлы . В вашем случае это может не иметь значения, просто имейте в виду, что если какой-либо из файлов является ссылками, эти ссылки будут нарушены. Если это имеет значение, подумайте об использовании командного редактора файлов, например ed или ex.

См. http://xrl.us/sedintro#uh-0 для приятного введения sed.

1
ответ дан 6 August 2018 в 01:08

зависит от того, как строки ограничены

Скажите, что ваши ограничены пробелами, тогда что-то вроде этого может сделать трюк:

sed 's/ .*foobox.*\.com / /g'

. 'g' будет убедиться, что если в строке имеется более одного совпадения, все совпадения будут заменены

, проверенными с помощью

DEF  dl-web.foobox.com XYZ
DEF dl.foobox.com XYZ
DEF  foobox.com XYZ
DEF  fooboxdownloads.com XYZ
DEF  www.foobox.com XYZ
DEF  www.fooboxdownloads.com XYZ 

, производя

DEF XYZ
DEF XYZ
DEF XYZ
DEF XYZ
DEF XYZ
DEF XYZ 
1
ответ дан 7 August 2018 в 18:34

Не могли бы вы использовать grep? Команда

cat ~/Foo/fooman.txt | grep -v foobox.com

удалит все строки, содержащие фразу foobox.com. Это то, что вы хотели сделать?

0
ответ дан 7 August 2018 в 18:34

[[:alnum:].-] будет соответствовать алфавитному или цифровому символу, или . или -. Положите * после него, и он будет соответствовать нулю или больше этого (жадно). Вероятно, это должно охватывать возможные символы в имени хоста. Также обратите внимание, что . соответствует любому символу, поэтому, если вы хотите соответствовать только ., вам нужно сбежать от него с помощью \ или заключить его в [ и ] (то есть: \. ] или [.]). Итак:

sed -i 's/[[:alnum:].-]*foobox\.com[[:alnum:].-]*//g' file

может быть тем, что вы хотите. Обратите внимание, что нестандартная опция -i для GNU и BSD sed не edit файлов, она заменяет файлы . В вашем случае это может не иметь значения, просто имейте в виду, что если какой-либо из файлов является ссылками, эти ссылки будут нарушены. Если это имеет значение, подумайте об использовании командного редактора файлов, например ed или ex.

См. http://xrl.us/sedintro#uh-0 для приятного введения sed.

1
ответ дан 7 August 2018 в 18:34

зависит от того, как строки ограничены

Скажите, что ваши ограничены пробелами, тогда что-то вроде этого может сделать трюк:

sed 's/ .*foobox.*\.com / /g'

. 'g' будет убедиться, что если в строке имеется более одного совпадения, все совпадения будут заменены

, проверенными с помощью

DEF  dl-web.foobox.com XYZ
DEF dl.foobox.com XYZ
DEF  foobox.com XYZ
DEF  fooboxdownloads.com XYZ
DEF  www.foobox.com XYZ
DEF  www.fooboxdownloads.com XYZ 

, производя

DEF XYZ
DEF XYZ
DEF XYZ
DEF XYZ
DEF XYZ
DEF XYZ 
1
ответ дан 10 August 2018 в 07:15

Не могли бы вы использовать grep? Команда

cat ~/Foo/fooman.txt | grep -v foobox.com

удалит все строки, содержащие фразу foobox.com. Это то, что вы хотели сделать?

0
ответ дан 10 August 2018 в 07:15

[[:alnum:].-] будет соответствовать алфавитному или цифровому символу, или . или -. Положите * после него, и он будет соответствовать нулю или больше этого (жадно). Вероятно, это должно охватывать возможные символы в имени хоста. Также обратите внимание, что . соответствует любому символу, поэтому, если вы хотите соответствовать только ., вам нужно сбежать от него с помощью \ или заключить его в [ и ] (то есть: \. ] или [.]). Итак:

sed -i 's/[[:alnum:].-]*foobox\.com[[:alnum:].-]*//g' file

может быть тем, что вы хотите. Обратите внимание, что нестандартная опция -i для GNU и BSD sed не edit файлов, она заменяет файлы . В вашем случае это может не иметь значения, просто имейте в виду, что если какой-либо из файлов является ссылками, эти ссылки будут нарушены. Если это имеет значение, подумайте об использовании командного редактора файлов, например ed или ex.

См. http://xrl.us/sedintro#uh-0 для приятного введения sed.

1
ответ дан 15 August 2018 в 19:15

Не могли бы вы использовать grep? Команда

cat ~/Foo/fooman.txt | grep -v foobox.com

удалит все строки, содержащие фразу foobox.com. Это то, что вы хотели сделать?

0
ответ дан 15 August 2018 в 19:15
  • 1
    Нет, я не хочу удалять всю строку, только foobox.com и любую другую фразу, которая включала foobox.com (т. Е. Dl-web.foobox.com) – user18432 21 May 2012 в 22:03
  • 2
    Ах, извините, я неправильно понял вопрос. Попробуйте использовать. * Как шаблон, а не * и посмотрите, работает ли это. – theabro 22 May 2012 в 14:27

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

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