Я использую «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
, он находит каждую запись с "foobox.com" и удаляет ее, но оставляет там левые (т. Е. "Dl-web." "Dl." "Downloads.com" "www." «www.downloads.com».
Можно ли заставить «sed» использовать «подстановочный знак» при поиске фразы? не работает). Если не используется подстановочный знак, может ли «sed» использовать какой-то другой метод для получения конкретного (dl-web.foobox.com), а не просто быть общим (foobox.com)? id «sed» не может сделать Хитрость, есть ли другая команда CI, которая бы справилась?
Спасибо за любую помощь, я новичок в Linux и пишу команды CI.
[[:alnum:].-]
будет соответствовать буквенному или числовому символу или .
или -
. Поставьте *
после него, и оно будет соответствовать нулю или более (жадно). Это должно охватывать возможные символы в имени хоста. Также обратите внимание, что .
соответствует любому символу, поэтому, если вы хотите соответствовать только .
, вам нужно экранировать его с помощью \
или заключить в [
и ]
(то есть: \.
] или [.]
). Итак:
sed -i 's/[[:alnum:].-]*foobox\.com[[:alnum:].-]*//g' file
может быть тем, что вы хотите. Обратите внимание, что нестандартная опция -i
в GNU и BSD sed не редактирует файлы, она заменяет файлы. Это может не иметь значения в вашем случае, просто имейте в виду, что если какой-либо из файлов является ссылками, эти ссылки будут нарушены. Если это имеет значение, подумайте об использовании командного редактора файлов, например 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. Это то, что вы хотели сделать?