Я использую «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.
[[:alnum:].-]
будет соответствовать алфавитному или цифровому символу, или .
или -
. Положите *
после него, и он будет соответствовать нулю или больше этого (жадно). Вероятно, это должно охватывать возможные символы в имени хоста. Также обратите внимание, что .
соответствует любому символу, поэтому, если вы хотите соответствовать только .
, вам нужно сбежать от него с помощью \
или заключить его в [
и ]
(то есть: \.
] или [.]
). Итак:
sed -i 's/[[:alnum:].-]*foobox\.com[[:alnum:].-]*//g' file
может быть тем, что вы хотите. Обратите внимание, что нестандартная опция -i
для GNU и BSD sed не edit файлов, она заменяет файлы . В вашем случае это может не иметь значения, просто имейте в виду, что если какой-либо из файлов является ссылками, эти ссылки будут нарушены. Если это имеет значение, подумайте об использовании командного редактора файлов, например ed
или ex
.
См. http://xrl.us/sedintro#uh-0 для приятного введения sed.
зависит от того, как строки ограничены
Скажите, что ваши ограничены пробелами, тогда что-то вроде этого может сделать трюк:
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
Не могли бы вы использовать grep? Команда
cat ~/Foo/fooman.txt | grep -v foobox.com
удалит все строки, содержащие фразу foobox.com. Это то, что вы хотели сделать?
Не могли бы вы использовать grep? Команда
cat ~/Foo/fooman.txt | grep -v foobox.com
удалит все строки, содержащие фразу foobox.com. Это то, что вы хотели сделать?
зависит от того, как строки ограничены
Скажите, что ваши ограничены пробелами, тогда что-то вроде этого может сделать трюк:
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
[[:alnum:].-]
будет соответствовать алфавитному или цифровому символу, или .
или -
. Положите *
после него, и он будет соответствовать нулю или больше этого (жадно). Вероятно, это должно охватывать возможные символы в имени хоста. Также обратите внимание, что .
соответствует любому символу, поэтому, если вы хотите соответствовать только .
, вам нужно сбежать от него с помощью \
или заключить его в [
и ]
(то есть: \.
] или [.]
). Итак:
sed -i 's/[[:alnum:].-]*foobox\.com[[:alnum:].-]*//g' file
может быть тем, что вы хотите. Обратите внимание, что нестандартная опция -i
для GNU и BSD sed не edit файлов, она заменяет файлы . В вашем случае это может не иметь значения, просто имейте в виду, что если какой-либо из файлов является ссылками, эти ссылки будут нарушены. Если это имеет значение, подумайте об использовании командного редактора файлов, например ed
или ex
.
См. http://xrl.us/sedintro#uh-0 для приятного введения sed.
Не могли бы вы использовать grep? Команда
cat ~/Foo/fooman.txt | grep -v foobox.com
удалит все строки, содержащие фразу foobox.com. Это то, что вы хотели сделать?
зависит от того, как строки ограничены
Скажите, что ваши ограничены пробелами, тогда что-то вроде этого может сделать трюк:
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
[[:alnum:].-]
будет соответствовать алфавитному или цифровому символу, или .
или -
. Положите *
после него, и он будет соответствовать нулю или больше этого (жадно). Вероятно, это должно охватывать возможные символы в имени хоста. Также обратите внимание, что .
соответствует любому символу, поэтому, если вы хотите соответствовать только .
, вам нужно сбежать от него с помощью \
или заключить его в [
и ]
(то есть: \.
] или [.]
). Итак:
sed -i 's/[[:alnum:].-]*foobox\.com[[:alnum:].-]*//g' file
может быть тем, что вы хотите. Обратите внимание, что нестандартная опция -i
для GNU и BSD sed не edit файлов, она заменяет файлы . В вашем случае это может не иметь значения, просто имейте в виду, что если какой-либо из файлов является ссылками, эти ссылки будут нарушены. Если это имеет значение, подумайте об использовании командного редактора файлов, например ed
или ex
.
См. http://xrl.us/sedintro#uh-0 для приятного введения sed.
зависит от того, как строки ограничены
Скажите, что ваши ограничены пробелами, тогда что-то вроде этого может сделать трюк:
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
Не могли бы вы использовать grep? Команда
cat ~/Foo/fooman.txt | grep -v foobox.com
удалит все строки, содержащие фразу foobox.com. Это то, что вы хотели сделать?
[[:alnum:].-]
будет соответствовать алфавитному или цифровому символу, или .
или -
. Положите *
после него, и он будет соответствовать нулю или больше этого (жадно). Вероятно, это должно охватывать возможные символы в имени хоста. Также обратите внимание, что .
соответствует любому символу, поэтому, если вы хотите соответствовать только .
, вам нужно сбежать от него с помощью \
или заключить его в [
и ]
(то есть: \.
] или [.]
). Итак:
sed -i 's/[[:alnum:].-]*foobox\.com[[:alnum:].-]*//g' file
может быть тем, что вы хотите. Обратите внимание, что нестандартная опция -i
для GNU и BSD sed не edit файлов, она заменяет файлы . В вашем случае это может не иметь значения, просто имейте в виду, что если какой-либо из файлов является ссылками, эти ссылки будут нарушены. Если это имеет значение, подумайте об использовании командного редактора файлов, например ed
или ex
.
См. http://xrl.us/sedintro#uh-0 для приятного введения sed.
зависит от того, как строки ограничены
Скажите, что ваши ограничены пробелами, тогда что-то вроде этого может сделать трюк:
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
Не могли бы вы использовать grep? Команда
cat ~/Foo/fooman.txt | grep -v foobox.com
удалит все строки, содержащие фразу foobox.com. Это то, что вы хотели сделать?
[[:alnum:].-]
будет соответствовать алфавитному или цифровому символу, или .
или -
. Положите *
после него, и он будет соответствовать нулю или больше этого (жадно). Вероятно, это должно охватывать возможные символы в имени хоста. Также обратите внимание, что .
соответствует любому символу, поэтому, если вы хотите соответствовать только .
, вам нужно сбежать от него с помощью \
или заключить его в [
и ]
(то есть: \.
] или [.]
). Итак:
sed -i 's/[[:alnum:].-]*foobox\.com[[:alnum:].-]*//g' file
может быть тем, что вы хотите. Обратите внимание, что нестандартная опция -i
для GNU и BSD sed не edit файлов, она заменяет файлы . В вашем случае это может не иметь значения, просто имейте в виду, что если какой-либо из файлов является ссылками, эти ссылки будут нарушены. Если это имеет значение, подумайте об использовании командного редактора файлов, например ed
или ex
.
См. http://xrl.us/sedintro#uh-0 для приятного введения sed.
Не могли бы вы использовать grep? Команда
cat ~/Foo/fooman.txt | grep -v foobox.com
удалит все строки, содержащие фразу foobox.com. Это то, что вы хотели сделать?